2 """Parse modules.cfg and dump its output either as ftmodule.h or a list of
6 from __future__ import print_function
16 # FONT_MODULES += <name>
17 # HINTING_MODULES += <name>
18 # RASTER_MODULES += <name>
19 # AUX_MODULES += <name>
20 # BASE_EXTENSIONS += <name>
24 def parse_modules_cfg(input_file):
28 "HINTING_MODULES": [],
31 "BASE_EXTENSIONS": [],
34 for line in input_file.splitlines():
36 # Ignore empty lines and those that start with a comment.
37 if not line or line[0] == "#":
41 assert len(items) == 3 and items[1] == "+=", (
42 "Unexpected input line [%s]" % line
44 assert items[0] in lists, (
45 "Unexpected configuration variable name " + items[0]
48 lists[items[0]].append(items[2])
53 def generate_ftmodule(lists):
54 result = "/* This is a generated file. */\n"
55 for driver in lists["FONT_MODULES"]:
56 if driver == "sfnt": # Special case for the sfnt 'driver'.
57 result += "FT_USE_MODULE( FT_Module_Class, sfnt_module_class )\n"
68 "FT_USE_MODULE( FT_Driver_ClassRec, %s_driver_class )\n" % name
71 for module in lists["HINTING_MODULES"]:
73 "FT_USE_MODULE( FT_Module_Class, %s_module_class )\n" % module
76 for module in lists["RASTER_MODULES"]:
78 "raster": "ft_raster1",
79 "smooth": "ft_smooth",
82 "FT_USE_MODULE( FT_Renderer_Class, %s_renderer_class )\n" % name
85 for module in lists["AUX_MODULES"]:
86 if module in ("psaux", "psnames", "otvalid", "gxvalid"):
88 "FT_USE_MODULE( FT_Module_Class, %s_module_class )\n" % module
91 result += "/* EOF */\n"
95 def generate_main_modules(lists):
98 + lists["HINTING_MODULES"]
99 + lists["RASTER_MODULES"]
103 def generate_aux_modules(lists):
104 return "\n".join(lists["AUX_MODULES"])
107 def generate_base_extensions(lists):
108 return "\n".join(lists["BASE_EXTENSIONS"])
112 parser = argparse.ArgumentParser(description=__doc__)
121 "base-extensions-list",
123 help="Select output format.",
128 metavar="CONFIGURE_RAW",
129 help="The input configure.raw file to parse.",
132 parser.add_argument("--output", help="Output file (default is stdout).")
134 args = parser.parse_args()
135 with open(args.input) as f:
136 input_data = f.read()
138 lists = parse_modules_cfg(input_data)
140 if args.format == "ftmodule.h":
141 result = generate_ftmodule(lists)
142 elif args.format == "main-modules":
143 result = generate_main_modules(lists)
144 elif args.format == "aux-modules":
145 result = generate_aux_modules(lists)
146 elif args.format == "base-extensions-list":
147 result = generate_base_extensions(lists)
149 assert False, "Invalid output format!"
152 with open(args.output, "w") as f:
159 if __name__ == "__main__":