1 # vim:set et sts=4 sw=4:
4 from xml.dom import minidom
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:
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)
22 filename = "/usr/share/X11/xkb/rules/evdev.xml"
23 dom = minidom.parse(file(filename))
24 name, root = simplfy_dom(dom)
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
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 <shawn.p.huang@gmail.com></author>
52 <license>GPL</license>
53 <homepage>http://code.google.com/p/ibus</homepage>
54 <textdomain>ibus</textdomain>
56 engine = u"""\t\t<engine>
58 <language>%s</language>
59 <license>GPL</license>
60 <author>Peng Huang <shawn.p.huang@gmail.com></author>
62 <longname>%s</longname>
63 <description>%s</description>
66 footer = u"""\t</engines>
71 for name, vname, sdesc, desc, languages in parse_xml():
73 ibus_name = "xkb:layout:%s-%s" % (name, vname)
74 layout = "%s(%s)" % (name, vname)
76 ibus_name = "xkb:layout:%s" % name
79 desc = cgi.escape(desc)
80 out = engine % (ibus_name + u"-" + l, l, layout, desc, desc, 99)
81 print out.encode("utf8")
85 if __name__ == "__main__":