import sys from xml.etree import ElementTree CTEMPLATE = \ """ /* * This file has been auto-generated from the introspection data available * in the at-spi2-core repository. The D-Bus procol is defined in this * repository, which can be found at: * * http://download.gnome.org/sources/at-spi2-core/0.1/ * * DO NOT EDIT. */ %s """ HTEMPLATE = \ """ /* * This file has been auto-generated from the introspection data available * in the at-spi2-core repository. The D-Bus procol is defined in this * repository, which can be found at: * * http://download.gnome.org/sources/at-spi2-core/0.1/ * * DO NOT EDIT. */ #ifndef SPI_INTROSPECTION_DATA_H_ #define SPI_INTROSPECTION_DATA_H_ %s #endif /* SPI_INTROSPECTION_DATA_H_ */ """ DECTEMPLATE = \ """ extern const char *%s; """ DEFTEMPLATE = \ """ const char *%s = %s; """ VERSION = "0.1.7" def convert_name (name): return "spi_" + name.replace (".", "_") def convert_contents (contents): contents = contents.replace ("\"", "\\\"") literals = ["\"%s\"" % (line) for line in contents.split ("\n")] return "\n".join (literals) def main (argv): #Open the XML file and process includes. tree = ElementTree.parse ("Processed.xml") root = tree.getroot () #Open the output files. cfile = open ("introspection.c", "w") hfile = open ("introspection.h", "w") ccontents = "" hcontents = "" for itf in root.findall ("node/interface"): #Get and convert the name of the interface. name = convert_name (itf.attrib["name"]) #Create the introspection string with version information. itf.attrib["version"] = VERSION contents = convert_contents (ElementTree.tostring (itf)) hcontents += DECTEMPLATE % (name) ccontents += DEFTEMPLATE % (name, contents) cfile.write (CTEMPLATE % (ccontents)) hfile.write (HTEMPLATE % (hcontents)) cfile.close () hfile.close () if __name__ == "__main__": sys.exit(main(sys.argv))