#!/usr/bin/env python
### from nevow.scripts.xmlgettext

import sys
from xml.dom import pulldom
from twisted.python import usage
from twisted.application import app
import nevow

def process(filename, msgs):
    events = pulldom.parse(filename)

    for (event, node) in events:
        if event == pulldom.START_ELEMENT:
            get = getattr(node, 'getAttributeNS', None)
            if get is not None:
                value = get('http://nevow.com/ns/nevow/0.1', 'render')
                if value == 'i18n':
                    events.expandNode(node)
                    msg = tuple([child.toxml('utf-8') for child in node.childNodes])
		    # TODO get line number out of pulldom
		    msgs.setdefault(msg, []).append(filename)

def report(msgs):
    msgs = msgs.items()
    msgs.sort()
    for msg, locations in msgs:
        for filename in locations:
            print '#: %s' % filename
	print 'msgid ""'
	for s in msg:
	    s = s.replace('\\', '\\\\')
	    s = s.replace('"', '\\"')
	    s = s.replace('\n', '\\n')
	    print '"%s"' % s
	print 'msgstr ""'
	print

class GettextOptions(usage.Options):
    def opt_version(self):
        print 'Nevow version:', nevow.__version__
        usage.Options.opt_version(self)

    def parseArgs(self, *files):
        self['files'] = files

def runApp(config):
    msgs = {}
    for filename in config['files']:
        process(filename, msgs)
    report(msgs)

def run():
    from twisted.application import app
    app.run(runApp, GettextOptions)

if __name__=='__main__':
    run()
