| # -*- 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() |