(root)/
harfbuzz-8.3.0/
src/
gen-os2-unicode-ranges.py
       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 ("""};""")