| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #!/usr/bin/env python3
- import sys
- agl = []
- aglseen = {}
- single_from_name = []
- multi_from_name = []
- name_from_single = {}
- code_from_multi = {}
- print("/* This file was generated by scripts/glyphdump.py. Do not edit. */")
- print()
- def readlist(filename):
- f = open(filename, "r")
- for line in f.readlines():
- if line[0] == '#':
- continue
- line = line[:-1]
- name, alts = line.split(';')
- for list in alts.split(','):
- list = [int(x, 16) for x in list.split(' ')]
- okay = True
- for ucs in list:
- if ucs > 0xffff:
- okay = False
- #if ucs >= 0xe000 and ucs <= 0xf8ff:
- # okay = False
- if okay and name not in aglseen:
- agl.append((name, list))
- aglseen[name] = True
- readlist("scripts/glyphlist.txt")
- readlist("scripts/texglyphlist.txt")
- for name, ucslist in agl:
- num = len(ucslist)
- if num == 1:
- ucs = ucslist[0]
- single_from_name.append((name, ucs))
- if ucs not in name_from_single:
- name_from_single[ucs] = []
- name_from_single[ucs].append(name)
- else:
- multi_from_name.append((name, ucslist))
- def dumplist(list):
- for item in list:
- sys.stdout.write(item)
- single_from_name.sort()
- singlenames = []
- singlecodes = []
- for name, ucs in single_from_name:
- singlenames.append("\"%s\",\n" % name)
- singlecodes.append("0x%04x,\n" % ucs)
- multi_from_name.sort()
- multinames = []
- multioffsets = []
- multicodes = []
- for name, ucslist in multi_from_name:
- multinames.append("\"%s\",\n" % name)
- multioffsets.append("%d,\n" % len(multicodes))
- multicodes.append("%d," % len(ucslist))
- for ucs in ucslist:
- multicodes.append(" 0x%04x," % ucs)
- multicodes.append("\n");
- keys = list(name_from_single.keys())
- keys.sort()
- dupoffsets = []
- dupnames = []
- for ucs in keys:
- list = name_from_single[ucs]
- if len(list) > 1:
- ofs = len(dupnames)
- dupoffsets.append("0x%04x, %d,\n" % (ucs, ofs))
- for name in list:
- dupnames.append("\"%s\", " % name)
- dupnames.append("0,\n")
- print("static const char *single_name_list[] = {")
- dumplist(singlenames)
- print("};")
- print()
- print("static const unsigned short single_code_list[] = {")
- dumplist(singlecodes)
- print("};")
- print()
- if False:
- print("static const char *multi_name_list[] = {")
- dumplist(multinames)
- print("};")
- print()
- print("static const unsigned short multi_offset_list[] = {")
- dumplist(multioffsets)
- print("};")
- print()
- print("static const unsigned short multi_code_list[] = {")
- dumplist(multicodes)
- print("};")
- print()
- print("static const unsigned short agl_dup_offsets[] = {")
- dumplist(dupoffsets)
- print("};")
- print()
- print("static const char *agl_dup_names[] = {")
- dumplist(dupnames)
- print("};")
|