home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / lib / python2.4 / site-packages / LanguageSelector / xkb.py < prev    next >
Encoding:
Python Source  |  2006-03-20  |  2.4 KB  |  83 lines

  1. import libxml2, sys
  2.  
  3. class Variant:
  4.     def __init__(self, name, desc, raw_desc):
  5.         self.name = name
  6.         self.desc = desc
  7.         self.raw_desc = raw_desc
  8.  
  9.     def __str__(self):
  10.         return "%s: %s, %s" % (self.name, self.desc, self.raw_desc)
  11.  
  12. class Layout:
  13.     def __init__(self, name, desc, raw_desc, short_desc, raw_short_desc, variants):
  14.         self.name = name
  15.         self.desc = desc
  16.         self.raw_desc = raw_desc
  17.         self.short_desc = short_desc
  18.         self.raw_short_desc = raw_short_desc
  19.         self.variants = variants
  20.         
  21.     def __str__(self):
  22.         return "%s: %s, %s; %s, %s;; %s" % (self.name,self.desc,self.raw_desc,self.short_desc,self.raw_short_desc,["%s" % x for x in self.variants])
  23.  
  24. def get_all_layout_possibilities():
  25.     possibility_list = list()
  26.     
  27.     #FIXME: don't call parseFile() twice
  28.     doc = libxml2.parseFile("/etc/X11/xkb/rules/xorg.xml")
  29.     ctxt = doc.xpathNewContext()
  30.             
  31.     for i in ctxt.xpathEval("/xkbConfigRegistry/layoutList/layout/configItem/name/text()"):
  32.         possibility_list.append(i.content)
  33.     
  34.     return possibility_list
  35.  
  36. def get_variants(layout_node, lang):
  37.     variant_list = list()
  38.  
  39.     variant_nodes = layout_node.xpathEval("../../../variantList/variant/configItem/name/text()")
  40.     for i in variant_nodes:
  41.         if len(i.xpathEval("../description[@xml:lang='%s']" % lang)) > 0:
  42.             trans = i.xpathEval("../description[@xml:lang='%s']" % lang)[0]
  43.         else:
  44.             trans = ""
  45.  
  46.         v = Variant(i.content, trans, i.xpathEval("../../description[position()=1]")[0].content)
  47.         variant_list.append(v)
  48.     
  49.     return variant_list
  50.  
  51.  
  52. def get_layouts(lang):
  53.     layout_list = list()
  54.     doc = libxml2.parseFile("/etc/X11/xkb/rules/xorg.xml")
  55.     ctxt = doc.xpathNewContext()
  56.     layout_nodes = ctxt.xpathEval("/xkbConfigRegistry/layoutList/layout/configItem/name/text()")
  57.  
  58.     for i in layout_nodes:
  59.         if i.content == lang:
  60.             if (len(i.xpathEval("../description[@xml:lang='%s']" % lang)) > 0):
  61.                 translation = i.xpathEval("../description[@xml:lang='%s']" % lang)[0]
  62.             else:
  63.                 translation = ""
  64.             if (len(i.xpathEval("../description[@xml:lang='%s']" % lang)) > 0):
  65.                 short_trans = i.xpathEval("../shortDescription[@xml:lang='%s']" % lang)[0]
  66.             else:
  67.                 short_trans = ""
  68.  
  69.             layout_list.append(Layout(i.content, 
  70.                 translation, i.xpathEval("../../description[position()=1]")[0].content, 
  71.                 short_trans, i.xpathEval("../../shortDescription[position()=1]")[0].content,
  72.                 get_variants(i, lang)))
  73.  
  74.     return layout_list
  75.  
  76.  
  77. if __name__ == "__main__":
  78.     for i in get_layouts("fr"): 
  79.         print i
  80.  
  81.     for i in get_all_layout_possibilities():
  82.         print i
  83.