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
|
#!/usr/bin/env python3
# This program acts like xgettext, specialized to extract strings from Zenmap's
# profile_editor.xml file.
import getopt
import os
import sys
# Prevent loading PyXML
import xml
xml.__path__ = [x for x in xml.__path__ if "_xmlplus" not in x]
import xml.sax
directory = None
def escape(s):
return '"' + s.replace('"', '\\"') + '"'
def output_msgid(msgid, locator):
print()
print("#: %s:%d" % (locator.getSystemId(), locator.getLineNumber()))
print("msgid", escape(msgid))
print("msgstr", escape(""))
class Handler (xml.sax.handler.ContentHandler):
def setDocumentLocator(self, locator):
self.locator = locator
def startElement(self, name, attrs):
if name == "group":
output_msgid(attrs["name"], self.locator)
if attrs.get("short_desc"):
output_msgid(attrs["short_desc"], self.locator)
if attrs.get("label"):
output_msgid(attrs["label"], self.locator)
opts, filenames = getopt.gnu_getopt(sys.argv[1:], "D:", ["directory="])
for o, a in opts:
if o == "-D" or o == "--directory":
directory = a
if directory is not None:
os.chdir(directory)
for fn in filenames:
with open(fn, "r") as f:
parser = xml.sax.make_parser()
parser.setContentHandler(Handler())
parser.parse(f)
if len(filenames) < 2:
parser = xml.sax.make_parser()
parser.setContentHandler(Handler())
parser.parse
|