| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- #!/usr/bin/env python3
- """usage: ./gen-arabic-joining-table.py ArabicShaping.txt Scripts.txt
- Input files:
- * https://unicode.org/Public/UCD/latest/ucd/ArabicShaping.txt
- * https://unicode.org/Public/UCD/latest/ucd/Scripts.txt
- """
- import os.path, sys
- if len (sys.argv) != 3:
- sys.exit (__doc__)
- files = [open (x, encoding='utf-8') for x in sys.argv[1:]]
- headers = [[f.readline (), f.readline ()] for f in files]
- while files[0].readline ().find ('##################') < 0:
- pass
- def read (f):
- mapping = {}
- for line in f:
- j = line.find ('#')
- if j >= 0:
- line = line[:j]
- fields = [x.strip () for x in line.split (';')]
- if len (fields) == 1:
- continue
- uu = fields[0].split ('..')
- start = int (uu[0], 16)
- if len (uu) == 1:
- end = start
- else:
- end = int (uu[1], 16)
- t = fields[1]
- for u in range (start, end + 1):
- mapping[u] = t
- return mapping
- def read_joining_uu (f):
- values = set ()
- for line in f:
- if line[0] == '#':
- continue
- fields = [x.strip () for x in line.split (';')]
- if len (fields) == 1:
- continue
- if fields[2] in {'T', 'U'}:
- continue
- values.add (int (fields[0], 16))
- return sorted (values)
- def print_has_arabic_joining (scripts, joining_uu):
- print ("static bool")
- print ("has_arabic_joining (hb_script_t script)")
- print ("{")
- print (" /* List of scripts that have data in arabic-table. */")
- print (" switch ((int) script)")
- print (" {")
- for script in sorted ({scripts[u] for u in joining_uu if scripts[u] not in {'Common', 'Inherited'}}):
- print (" case HB_SCRIPT_{}:".format (script.upper ()))
- print (" return true;")
- print ()
- print (" default:")
- print (" return false;")
- print (" }")
- print ("}")
- print ()
- print ("/* == Start of generated function == */")
- print ("/*")
- print (" * The following function is generated by running:")
- print (" *")
- print (" * ./gen-arabic-joining-list.py ArabicShaping.txt Scripts.txt")
- print (" *")
- print (" * on files with these headers:")
- print (" *")
- for h in headers:
- for l in h:
- print (" * %s" % (l.strip ()))
- print (" */")
- print ()
- print ("#ifndef HB_OT_SHAPER_ARABIC_JOINING_LIST_HH")
- print ("#define HB_OT_SHAPER_ARABIC_JOINING_LIST_HH")
- print ()
- print_has_arabic_joining (read (files[1]), read_joining_uu (files[0]))
- print ()
- print ("#endif /* HB_OT_SHAPER_ARABIC_JOINING_LIST_HH */")
- print ()
- print ("/* == End of generated function == */")
|