|  | @@ -124,6 +124,7 @@ def _MacroRefRe(macro_names):
 | 
	
		
			
				|  |  |    return re.compile(r'\b(?P<macro_ref>(?P<name>(%s))\((?P<args>.*?)\))' %
 | 
	
		
			
				|  |  |                      '|'.join(macro_names))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def _MacroArgRefRe(macro_arg_names):
 | 
	
		
			
				|  |  |    # Takes in a list of macro arg names and makes a regex that will match
 | 
	
		
			
				|  |  |    # uses of those args.
 | 
	
	
		
			
				|  | @@ -318,25 +319,26 @@ class MacroCollection(object):
 | 
	
		
			
				|  |  |        return macro.body
 | 
	
		
			
				|  |  |      assert len(arg_values) == len(macro.args)
 | 
	
		
			
				|  |  |      args = dict(zip(macro.args, arg_values))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def _lookupArg(match):
 | 
	
		
			
				|  |  |        val = args[match.group('name')]
 | 
	
		
			
				|  |  |        opt = match.group('option')
 | 
	
		
			
				|  |  |        if opt:
 | 
	
		
			
				|  |  | -        if opt == 'S': # Spaces for the length
 | 
	
		
			
				|  |  | +        if opt == 'S':  # Spaces for the length
 | 
	
		
			
				|  |  |            return ' ' * len(val)
 | 
	
		
			
				|  |  | -        elif opt == 'l': # Lowercase first character
 | 
	
		
			
				|  |  | +        elif opt == 'l':  # Lowercase first character
 | 
	
		
			
				|  |  |            if val:
 | 
	
		
			
				|  |  |              return val[0].lower() + val[1:]
 | 
	
		
			
				|  |  |            else:
 | 
	
		
			
				|  |  |              return val
 | 
	
		
			
				|  |  | -        elif opt == 'L': # All Lowercase
 | 
	
		
			
				|  |  | +        elif opt == 'L':  # All Lowercase
 | 
	
		
			
				|  |  |            return val.lower()
 | 
	
		
			
				|  |  | -        elif opt == 'u': # Uppercase first character
 | 
	
		
			
				|  |  | +        elif opt == 'u':  # Uppercase first character
 | 
	
		
			
				|  |  |            if val:
 | 
	
		
			
				|  |  |              return val[0].upper() + val[1:]
 | 
	
		
			
				|  |  |            else:
 | 
	
		
			
				|  |  |              return val
 | 
	
		
			
				|  |  | -        elif opt == 'U': # All Uppercase
 | 
	
		
			
				|  |  | +        elif opt == 'U':  # All Uppercase
 | 
	
		
			
				|  |  |            return val.upper()
 | 
	
		
			
				|  |  |          else:
 | 
	
		
			
				|  |  |            raise PDDMError('Unknown arg option "%s$%s" while expanding "%s".%s'
 | 
	
	
		
			
				|  | @@ -350,6 +352,7 @@ class MacroCollection(object):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    def _EvalMacrosRefs(self, text, macro_stack):
 | 
	
		
			
				|  |  |      macro_ref_re = _MacroRefRe(self._macros.keys())
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      def _resolveMacro(match):
 | 
	
		
			
				|  |  |        return self._Expand(match, macro_stack)
 | 
	
		
			
				|  |  |      return macro_ref_re.sub(_resolveMacro, text)
 | 
	
	
		
			
				|  | @@ -496,9 +499,10 @@ class SourceFile(object):
 | 
	
		
			
				|  |  |        # Add the ending marker.
 | 
	
		
			
				|  |  |        if len(captured_lines) == 1:
 | 
	
		
			
				|  |  |          result.append('//%%PDDM-EXPAND-END %s' %
 | 
	
		
			
				|  |  | -                       captured_lines[0][directive_len:].strip())
 | 
	
		
			
				|  |  | +                      captured_lines[0][directive_len:].strip())
 | 
	
		
			
				|  |  |        else:
 | 
	
		
			
				|  |  | -        result.append('//%%PDDM-EXPAND-END (%s expansions)' % len(captured_lines))
 | 
	
		
			
				|  |  | +        result.append('//%%PDDM-EXPAND-END (%s expansions)' %
 | 
	
		
			
				|  |  | +                      len(captured_lines))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |        return result
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -669,15 +673,15 @@ def main(args):
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      if src_file.processed_content != src_file.original_content:
 | 
	
		
			
				|  |  |        if not opts.dry_run:
 | 
	
		
			
				|  |  | -        print 'Updating for "%s".' % a_path
 | 
	
		
			
				|  |  | +        print('Updating for "%s".' % a_path)
 | 
	
		
			
				|  |  |          with open(a_path, 'w') as f:
 | 
	
		
			
				|  |  |            f.write(src_file.processed_content)
 | 
	
		
			
				|  |  |        else:
 | 
	
		
			
				|  |  |          # Special result to indicate things need updating.
 | 
	
		
			
				|  |  | -        print 'Update needed for "%s".' % a_path
 | 
	
		
			
				|  |  | +        print('Update needed for "%s".' % a_path)
 | 
	
		
			
				|  |  |          result = 1
 | 
	
		
			
				|  |  |      elif opts.verbose:
 | 
	
		
			
				|  |  | -      print 'No update for "%s".' % a_path
 | 
	
		
			
				|  |  | +      print('No update for "%s".' % a_path)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |    return result
 | 
	
		
			
				|  |  |  
 |