File: xgettext-xml.py

package info (click to toggle)
democracyplayer 0.9.1-1.1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 20,876 kB
  • ctags: 6,313
  • sloc: python: 36,830; cpp: 1,038; ansic: 286; xml: 257; sh: 71; makefile: 30
file content (63 lines) | stat: -rw-r--r-- 1,786 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env python
# xgettext-xml.py (c) 2005 Nicholas Nassar
#
# This file is part of DTV
#
# It is a simple utility to extract translatable gettext strings from
# HTML template documents. It takes in an XML document on stdin and
# returns POT file entries on stdout.
#
# The format is roughly based on
# http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport

from xml.sax.handler import ContentHandler,feature_external_ges
from xml.sax import make_parser, parse
from sys import stdin

##
# Parser that reads in an XML template file in this format and output
# a POT file
class GettextParser(ContentHandler):
    def startDocument(self):
	self.output = ''
	self.tagStack = []
	self.attrStack = []
	self.transStack = []

    def inTranslate(self):
	ret = False
	try:
	    ret = 'i18n:translate' in self.attrStack[-1].keys()
	except:
	    pass
	return ret

    def endDocument(self):
	print self.output

    def startElement(self,name,attrs):
	if self.inTranslate():
	    self.transStack[-1] += '${'+attrs['i18n:name']+'}'
	if 'i18n:translate' in attrs.keys():
	    self.transStack.append("")
	self.tagStack.append(name)
	self.attrStack.append(attrs)

    def endElement(self,name):
	if self.inTranslate():
	    self.output += "msgid \""
	    self.output += self.transStack[-1].strip().replace("\r\n"," ").replace("\r"," ").replace("\n"," ")
	    self.output += "\"\nmsgstr \"\"\n\n"
	    self.transStack.pop()
	self.tagStack.pop()
	self.attrStack.pop()

    def characters(self, data):
	if self.inTranslate():
	    self.transStack[-1] += data.replace('"','\\"')

if __name__ == "__main__":
    parser = make_parser()
    parser.setContentHandler(GettextParser())
    parser.setFeature(feature_external_ges,0)
    parser.parse(stdin)