Blame common/mangle-db.py

Packit 971217
# -*- Mode: Python -*-
Packit 971217
# vi:si:et:sw=4:sts=4:ts=4
Packit 971217
Packit 971217
"""
Packit 971217
Insert includes for the element-*-details.xml files into the related docbook
Packit 971217
files.
Packit 971217
"""
Packit 971217
Packit 971217
from __future__ import print_function, unicode_literals
Packit 971217
Packit 971217
import codecs
Packit 971217
import glob
Packit 971217
import os
Packit 971217
import sys
Packit 971217
Packit 971217
import xml.dom.minidom
Packit 971217
Packit 971217
def patch(related, details):
Packit 971217
    try:
Packit 971217
        doc = xml.dom.minidom.parse(related)
Packit 971217
    except IOError:
Packit 971217
        return
Packit 971217
Packit 971217
    # find the insertion point
Packit 971217
    elem = None
Packit 971217
    for e in doc.childNodes:
Packit 971217
        if e.nodeType == e.ELEMENT_NODE and e.localName == 'refentry':
Packit 971217
            elem = e
Packit 971217
            break
Packit 971217
    if elem == None:
Packit 971217
        return
Packit 971217
Packit 971217
    elem2 = None
Packit 971217
    for e in elem.childNodes:
Packit 971217
        if e.nodeType == e.ELEMENT_NODE and e.localName == 'refsect1':
Packit 971217
            id = e.getAttributeNode('id')
Packit 971217
            role = e.getAttributeNode('role')
Packit 971217
            if id and id.nodeValue.endswith('.description') and role and role.nodeValue == 'desc':
Packit 971217
                elem2 = e
Packit 971217
                break
Packit 971217
    if elem2 == None:
Packit 971217
        return
Packit 971217
Packit 971217
    # insert include
Packit 971217
    include = doc.createElement('include')
Packit 971217
    include.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
Packit 971217
    include.setAttribute('href', details)
Packit 971217
    fallback = doc.createElement('fallback')
Packit 971217
    fallback.setAttribute('xmlns', 'http://www.w3.org/2003/XInclude')
Packit 971217
    include.appendChild(fallback)
Packit 971217
    elem2.appendChild(include)
Packit 971217
Packit 971217
    # store patched file
Packit 971217
    result = codecs.open(related, mode="w", encoding="utf-8")
Packit 971217
    #result = open(related, "wb")
Packit 971217
    doc.writexml(result)
Packit 971217
    result.close()
Packit 971217
Packit 971217
def main():
Packit 971217
    if not len(sys.argv) == 2:
Packit 971217
        sys.stderr.write('Please specify the xml/ dir')
Packit 971217
        sys.exit(1)
Packit 971217
Packit 971217
    xmldir = sys.argv[1]
Packit 971217
Packit 971217
    # parse all *-details.xml files and patch includes into the corresponding
Packit 971217
    # xml files
Packit 971217
    for details in glob.glob("%s/element-*-details.xml" % xmldir):
Packit 971217
        patch (details.replace("-details", ""), os.path.basename(details))
Packit 971217
Packit 971217
main()