1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- #!/usr/bin/python3
-
- import os
- import re
-
- origin = os.path.realpath(os.path.dirname(__file__))
- fn = os.path.join(origin, '..', 'common', 'rfb', 'keysymdef.h')
-
- keys = {}
- prog = re.compile('#define\s+XK_([^\s]+)\s*0x([0-9A-Fa-f]+)\s*/[*].\s*U[+]([0-9A-Fa-f]+)\s+([^*]+)\s*.[*]/')
- with open(fn) as f:
- for line in f:
- m = prog.search(line)
- if m is None:
- continue
-
- (ksname, ks, ucs, ucsname) = m.group(1, 2, 3, 4)
- ks = int(ks, 16)
- ucs = int(ucs, 16)
-
- if (ks == ucs) and \
- (((ks >= 0x20) and (ks <= 0x7f)) or \
- ((ks >= 0xa0) and (ks <= 0xff))):
- continue
- if (ks & 0xff000000) == 0x01000000:
- assert ks == ucs | 0x01000000
- continue
-
- assert ks not in keys
- keys[ks] = { 'name': ksname, 'ucs': ucs, 'ucsname': ucsname }
-
- print("""/*
- * This file is auto-generated from keysymdef.h
- */
-
- struct codepair {
- unsigned short keysym;
- unsigned short ucs;
- };
-
- static const struct codepair keysymtab[] = {""")
-
- maxlen = max([ len(keys[ks]['name']) for ks in keys ])
- for ks in sorted(keys):
- key = keys[ks]
- if (key['ucs'] < 0x20) or key['ucs'] == 0x7f:
- ch = ' '
- else:
- ch = chr(key['ucs'])
- print(" { 0x%04x, 0x%04x }, /* %0*s %s %s */" %
- (ks, key['ucs'], maxlen, key['name'], ch, key['ucsname']))
-
- print("};")
|