Blame common/mangle-db.py

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