3 from __future__ import with_statement
8 _re = re.compile('^#define XK_([a-zA-Z_0-9]+)\s+0x([0-9A-Fa-f]+)\s*/\*\s*U\+([0-9A-Fa-f]{4,6}) (.*)\s+\*/\s*$')
10 # TODO provide defaults from current X.org
15 _hfile = os.path.join('X11', 'keysymdef.h')
19 # TODO include dirs: should be portable
20 _candidates = ['/usr/local/include', '/usr/include', '/usr/share/include']
21 for dir in _candidates:
22 _include = os.path.join(dir, _hfile)
23 if os.path.exists(_include):
26 if _include is not None:
28 with open(_include, 'r') as file:
30 match = _re.match(line.strip())
34 uni = match.group(3).lower()
35 uniname = match.group(4)
36 _uni2name[uni] = name # FIXME what to do with duplicates?
46 if isinstance(uni, int):
48 elif isinstance(uni, basestring):
50 key = "%04x" % ord(uni)
57 return "U%s" % key.upper()
59 if __name__ == '__main__':
60 for u in range(0,0xffff):
61 print "U+%04X\t%s" % tuple([u, name(u)])