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

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