1 # vim:set et sts=4 sw=4:
4 from xml.dom import minidom
9 if len(node.childNodes) == 1 and node.childNodes[0].nodeType == node.TEXT_NODE:
10 return name, node.childNodes[0].nodeValue
11 for child in node.childNodes:
12 if child.nodeType != node.ELEMENT_NODE:
14 child_name, child_value = simplfy_dom(child)
15 if child_name not in children:
16 children[child_name] = []
17 children[child_name].append(child_value)
21 filename = "/usr/share/X11/xkb/rules/evdev.xml"
22 dom = minidom.parse(file(filename))
23 name, root = simplfy_dom(dom)
25 layouts = root['xkbConfigRegistry'][0]['layoutList'][0]['layout']
26 for layout in layouts:
27 config = layout['configItem'][0]
28 name = config['name'][0]
29 short_desc = config.get('shortDescription', [''])[0]
30 desc = config.get('description', [''])[0]
31 languages = config.get('languageList', [{}])[0].get('iso639Id', [])
32 variants = layout.get('variantList', [{}])[0].get('variant', [])
33 yield name, None, short_desc, desc, languages
34 for variant in variants:
35 variant_config = variant['configItem'][0]
36 variant_name = variant_config['name'][0]
37 variant_short_desc = variant_config.get('shortDescription', [''])[0]
38 variant_desc = variant_config.get('description', [''])[0]
39 variant_languages = variant_config.get('languageList', [{}])[0].get('iso639Id', [])
40 if not isinstance(variant_languages, list):
41 variant_languages = [variant_languages]
42 yield name, variant_name, variant_short_desc, variant_desc, languages + variant_languages
45 header = u"""<component>
46 <name>org.freedesktop.IBus.Simple</name>
47 <description>A table based simple engine</description>
48 <exec>/home/penghuang/ibus/libexec/ibus-engine-simple</exec>
49 <version>1.4.99.20120104</version>
50 <author>Peng Huang <shawn.p.huang@gmail.com></author>
51 <license>GPL</license>
52 <homepage>http://code.google.com/p/ibus</homepage>
53 <textdomain>ibus</textdomain>
55 engine = u"""\t\t<engine>
57 <language>%s</language>
58 <license>GPL</license>
59 <author>Peng Huang <shawn.p.huang@gmail.com></author>
61 <longname>%s</longname>
62 <description>%s</description>
65 footer = u"""\t</engines>
70 for name, vname, sdesc, desc, languages in parse_xml():
72 ibus_name = "xkb:layout:%s-%s" % (name, vname)
73 layout = "%s(%s)" % (name, vname)
75 ibus_name = "xkb:layout:%s" % name
78 out = engine % (ibus_name + u"-" + l, l, layout, desc, desc, 99)
79 print out.encode("utf8")
83 if __name__ == "__main__":