This file is indexed.

/usr/share/pyshared/LanguageSelector/xkb.py is in language-selector-common 0.79.4.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import libxml2

class Variant:
	def __init__(self, name, desc, raw_desc):
		self.name = name
		self.desc = desc
		self.raw_desc = raw_desc

	def __str__(self):
		return "%s: %s, %s" % (self.name, self.desc, self.raw_desc)

class Layout:
	def __init__(self, name, desc, raw_desc, short_desc, raw_short_desc, variants):
		self.name = name
		self.desc = desc
		self.raw_desc = raw_desc
		self.short_desc = short_desc
		self.raw_short_desc = raw_short_desc
		self.variants = variants
		
	def __str__(self):
		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])

def get_all_layout_possibilities():
	possibility_list = list()
	
	#FIXME: don't call parseFile() twice
	doc = libxml2.parseFile("/etc/X11/xkb/rules/xorg.xml")
	ctxt = doc.xpathNewContext()
			
	for i in ctxt.xpathEval("/xkbConfigRegistry/layoutList/layout/configItem/name/text()"):
		possibility_list.append(i.content)
	
	return possibility_list

def get_variants(layout_node, lang):
	variant_list = list()

	variant_nodes = layout_node.xpathEval("../../../variantList/variant/configItem/name/text()")
	for i in variant_nodes:
		if len(i.xpathEval("../description[@xml:lang='%s']" % lang)) > 0:
			trans = i.xpathEval("../description[@xml:lang='%s']" % lang)[0]
		else:
			trans = ""

		v = Variant(i.content, trans, i.xpathEval("../../description[position()=1]")[0].content)
		variant_list.append(v)
	
	return variant_list


def get_layouts(lang):
	layout_list = list()
	doc = libxml2.parseFile("/etc/X11/xkb/rules/xorg.xml")
	ctxt = doc.xpathNewContext()
	layout_nodes = ctxt.xpathEval("/xkbConfigRegistry/layoutList/layout/configItem/name/text()")

	for i in layout_nodes:
		if i.content == lang:
			if (len(i.xpathEval("../description[@xml:lang='%s']" % lang)) > 0):
				translation = i.xpathEval("../description[@xml:lang='%s']" % lang)[0]
			else:
				translation = ""
			if (len(i.xpathEval("../description[@xml:lang='%s']" % lang)) > 0):
				short_trans = i.xpathEval("../shortDescription[@xml:lang='%s']" % lang)[0]
			else:
				short_trans = ""

			layout_list.append(Layout(i.content, 
				translation, i.xpathEval("../../description[position()=1]")[0].content, 
				short_trans, i.xpathEval("../../shortDescription[position()=1]")[0].content,
				get_variants(i, lang)))

	return layout_list


if __name__ == "__main__":
	for i in get_layouts("fr"): 
		print i

	for i in get_all_layout_possibilities():
		print i