tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

gen-os2-unicode-ranges.py (1239B)


      1 #!/usr/bin/env python3
      2 
      3 """Generates the code for a sorted unicode range array as used in hb-ot-os2-unicode-ranges.hh
      4 Input is a tab separated list of unicode ranges from the otspec
      5 (https://docs.microsoft.com/en-us/typography/opentype/spec/os2#ur).
      6 """
      7 
      8 import re
      9 import sys
     10 
     11 
     12 print ("""static OS2Range _hb_os2_unicode_ranges[] =
     13 {""")
     14 
     15 args = sys.argv[1:]
     16 input_file = args[0]
     17 
     18 with open (input_file, mode="r", encoding="utf-8") as f:
     19 
     20  all_ranges = []
     21  current_bit = 0
     22  while True:
     23    line = f.readline().strip()
     24    if not line:
     25      break
     26    fields = re.split(r'\t+', line)
     27    if len(fields) == 3:
     28      current_bit = fields[0]
     29      fields = fields[1:]
     30    elif len(fields) > 3:
     31      raise Exception("bad input :(.")
     32 
     33    name = fields[0]
     34    ranges = re.split("-", fields[1])
     35    if len(ranges) != 2:
     36      raise Exception("bad input :(.")
     37 
     38    v = tuple((int(ranges[0], 16), int(ranges[1], 16), int(current_bit), name))
     39    all_ranges.append(v)
     40 
     41 all_ranges = sorted(all_ranges, key=lambda t: t[0])
     42 
     43 for ranges in all_ranges:
     44  start = ("0x%X" % ranges[0]).rjust(8)
     45  end = ("0x%X" % ranges[1]).rjust(8)
     46  bit = ("%s" % ranges[2]).rjust(3)
     47 
     48  print ("  {%s, %s, %s}, // %s" % (start, end, bit, ranges[3]))
     49 
     50 print ("""};""")