Escape some desc
[platform/upstream/ibus.git] / engine / gensimple.py
1 # vim:set et sts=4 sw=4:
2 #!/usr/bin/env python
3
4 from xml.dom import minidom
5 import cgi
6
7 def simplfy_dom(node):
8     name = node.nodeName
9     children = {}
10     if len(node.childNodes) == 1 and node.childNodes[0].nodeType == node.TEXT_NODE:
11         return name, node.childNodes[0].nodeValue
12     for child in node.childNodes:
13         if child.nodeType != node.ELEMENT_NODE:
14             continue
15         child_name, child_value = simplfy_dom(child)
16         if child_name not in children:
17             children[child_name] = []
18         children[child_name].append(child_value)
19     return name, children
20
21 def parse_xml():
22     filename = "/usr/share/X11/xkb/rules/evdev.xml"
23     dom = minidom.parse(file(filename))
24     name, root = simplfy_dom(dom)
25
26     layouts = root['xkbConfigRegistry'][0]['layoutList'][0]['layout']
27     for layout in layouts:
28         config = layout['configItem'][0]
29         name = config['name'][0]
30         short_desc = config.get('shortDescription', [''])[0]
31         desc = config.get('description', [''])[0]
32         languages = config.get('languageList', [{}])[0].get('iso639Id', [])
33         variants = layout.get('variantList', [{}])[0].get('variant', [])
34         yield name, None, short_desc, desc, languages
35         for variant in variants:
36             variant_config = variant['configItem'][0]
37             variant_name = variant_config['name'][0]
38             variant_short_desc = variant_config.get('shortDescription', [''])[0]
39             variant_desc = variant_config.get('description', [''])[0]
40             variant_languages = variant_config.get('languageList', [{}])[0].get('iso639Id', [])
41             if not isinstance(variant_languages, list):
42                 variant_languages = [variant_languages]
43             yield name, variant_name, variant_short_desc, variant_desc, languages + variant_languages
44
45 def gen_xml():
46     header = u"""<component>
47         <name>org.freedesktop.IBus.Simple</name>
48         <description>A table based simple engine</description>
49         <exec>/home/penghuang/ibus/libexec/ibus-engine-simple</exec>
50         <version>1.4.99.20120104</version>
51         <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
52         <license>GPL</license>
53         <homepage>http://code.google.com/p/ibus</homepage>
54         <textdomain>ibus</textdomain>
55         <engines>"""
56     engine = u"""\t\t<engine>
57                         <name>%s</name>
58                         <language>%s</language>
59                         <license>GPL</license>
60                         <author>Peng Huang &lt;shawn.p.huang@gmail.com&gt;</author>
61                         <layout>%s</layout>
62                         <longname>%s</longname>
63                         <description>%s</description>
64                         <rank>%d</rank>
65                 </engine>"""
66     footer = u"""\t</engines>
67 </component>"""
68     
69     print header
70     
71     for name, vname, sdesc, desc, languages in parse_xml():
72         if vname:
73             ibus_name = "xkb:layout:%s-%s" % (name, vname)
74             layout = "%s(%s)" % (name, vname)
75         else:
76             ibus_name = "xkb:layout:%s" % name
77             layout = name
78         for l in languages:
79             desc = cgi.escape(desc)
80             out = engine % (ibus_name + u"-" + l, l, layout, desc, desc, 99)
81             print out.encode("utf8")
82     
83     print footer
84
85 if __name__ == "__main__":
86     gen_xml()