Blame telepathy-account-widgets/tools/xincludator.py

Packit Service c6b9b0
#!/usr/bin/python
Packit Service c6b9b0
Packit Service c6b9b0
import sys
Packit Service c6b9b0
from sys import argv, stdout, stderr
Packit Service c6b9b0
import codecs, locale
Packit Service c6b9b0
import os
Packit Service c6b9b0
import xml.dom.minidom
Packit Service c6b9b0
Packit Service c6b9b0
if sys.version_info[0] < 3:
Packit Service c6b9b0
    stdout = codecs.getwriter('utf-8')(stdout)
Packit Service c6b9b0
Packit Service c6b9b0
NS_XI = 'http://www.w3.org/2001/XInclude'
Packit Service c6b9b0
Packit Service c6b9b0
def xincludate(dom, base, dropns = []):
Packit Service c6b9b0
    remove_attrs = []
Packit Service c6b9b0
    for i in range(dom.documentElement.attributes.length):
Packit Service c6b9b0
        attr = dom.documentElement.attributes.item(i)
Packit Service c6b9b0
        if attr.prefix == 'xmlns':
Packit Service c6b9b0
            if attr.localName in dropns:
Packit Service c6b9b0
                remove_attrs.append(attr)
Packit Service c6b9b0
            else:
Packit Service c6b9b0
                dropns.append(attr.localName)
Packit Service c6b9b0
    for attr in remove_attrs:
Packit Service c6b9b0
        dom.documentElement.removeAttributeNode(attr)
Packit Service c6b9b0
    for include in dom.getElementsByTagNameNS(NS_XI, 'include'):
Packit Service c6b9b0
        href = include.getAttribute('href')
Packit Service c6b9b0
        # FIXME: assumes Unixy paths
Packit Service c6b9b0
        filename = os.path.join(os.path.dirname(base), href)
Packit Service c6b9b0
        subdom = xml.dom.minidom.parse(filename)
Packit Service c6b9b0
        xincludate(subdom, filename, dropns)
Packit Service c6b9b0
        if './' in href:
Packit Service c6b9b0
            subdom.documentElement.setAttribute('xml:base', href)
Packit Service c6b9b0
        include.parentNode.replaceChild(subdom.documentElement, include)
Packit Service c6b9b0
Packit Service c6b9b0
if __name__ == '__main__':
Packit Service c6b9b0
    argv = argv[1:]
Packit Service c6b9b0
    dom = xml.dom.minidom.parse(argv[0])
Packit Service c6b9b0
    xincludate(dom, argv[0])
Packit Service c6b9b0
Packit Service c6b9b0
    if sys.version_info[0] >= 3:
Packit Service c6b9b0
        xml = dom.toxml(encoding=None)
Packit Service c6b9b0
    else:
Packit Service c6b9b0
        xml = dom.toxml()
Packit Service c6b9b0
Packit Service c6b9b0
    stdout.write(xml)
Packit Service c6b9b0
    stdout.write('\n')