summaryrefslogtreecommitdiffstats
path: root/zenmap/share/zenmap/locale/xgettext-profile_editor.py
blob: 2ce09a69fb1bc87586653156a87d8dd045e61cb5 (plain)
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