Blame common/mangle-db.py

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