summaryrefslogtreecommitdiff
path: root/mangle-db.py
diff options
context:
space:
mode:
Diffstat (limited to 'mangle-db.py')
-rw-r--r--mangle-db.py71
1 files changed, 71 insertions, 0 deletions
diff --git a/mangle-db.py b/mangle-db.py
new file mode 100644
index 0000000..463e5bc
--- /dev/null
+++ b/mangle-db.py
@@ -0,0 +1,71 @@
+# -*- Mode: Python -*-
+# vi:si:et:sw=4:sts=4:ts=4
+
+"""
+Insert includes for the element-*-details.xml files into the related docbook
+files.
+"""
+
+from __future__ import print_function, unicode_literals
+
+import codecs
+import glob
+import os
+import sys
+
+import xml.dom.minidom
+
+def patch(related, details):
+ try:
+ doc = xml.dom.minidom.parse(related)
+ except IOError:
+ return
+
+ # find the insertion point
+ elem = None
+ for e in doc.childNodes:
+ if e.nodeType == e.ELEMENT_NODE and e.localName == 'refentry':
+ elem = e
+ break
+ if elem == None:
+ return
+
+ elem2 = None
+ for e in elem.childNodes:
+ if e.nodeType == e.ELEMENT_NODE and e.localName == 'refsect1':
+ id = e.getAttributeNode('id')
+ role = e.getAttributeNode('role')
+ if id and id.nodeValue.endswith('.description') and role and role.nodeValue == 'desc':
+ elem2 = e
+ break
+ if elem2 == None:
+ return
+
+ # insert include
+ include = doc.createElement('include')
+ include.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
+ include.setAttribute('href', details)
+ fallback = doc.createElement('fallback')
+ fallback.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
+ include.appendChild(fallback)
+ elem2.appendChild(include)
+
+ # store patched file
+ result = codecs.open(related, mode="w", encoding="utf-8")
+ #result = open(related, "wb")
+ doc.writexml(result)
+ result.close()
+
+def main():
+ if not len(sys.argv) == 2:
+ sys.stderr.write('Please specify the xml/ dir')
+ sys.exit(1)
+
+ xmldir = sys.argv[1]
+
+ # parse all *-details.xml files and patch includes into the corresponding
+ # xml files
+ for details in glob.glob("%s/element-*-details.xml" % xmldir):
+ patch (details.replace("-details", ""), os.path.basename(details))
+
+main()