summaryrefslogtreecommitdiff
path: root/xml/versioned-introspection.py
diff options
context:
space:
mode:
Diffstat (limited to 'xml/versioned-introspection.py')
-rw-r--r--xml/versioned-introspection.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/xml/versioned-introspection.py b/xml/versioned-introspection.py
new file mode 100644
index 0000000..3922f66
--- /dev/null
+++ b/xml/versioned-introspection.py
@@ -0,0 +1,91 @@
+
+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))