parent
6f754852c1
commit
7bffb5d7ba
7 changed files with 158 additions and 34 deletions
@ -0,0 +1,104 @@ |
||||
#!/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 |
||||
|
||||
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_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH") |
||||
print ("#define HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH") |
||||
print () |
||||
|
||||
print_has_arabic_joining (read (files[1]), read_joining_uu (files[0])) |
||||
|
||||
print () |
||||
print ("#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH */") |
||||
print () |
||||
print ("/* == End of generated function == */") |
@ -0,0 +1,47 @@ |
||||
/* == Start of generated function == */ |
||||
/*
|
||||
* The following function is generated by running: |
||||
* |
||||
* ./gen-arabic-joining-list.py ArabicShaping.txt Scripts.txt |
||||
* |
||||
* on files with these headers: |
||||
* |
||||
* # ArabicShaping-13.0.0.txt |
||||
* # Date: 2020-01-31, 23:55:00 GMT [KW, RP] |
||||
* # Scripts-13.0.0.txt |
||||
* # Date: 2020-01-22, 00:07:43 GMT |
||||
*/ |
||||
|
||||
#ifndef HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH |
||||
#define HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH |
||||
|
||||
static bool |
||||
has_arabic_joining (hb_script_t script) |
||||
{ |
||||
/* List of scripts that have data in arabic-table. */ |
||||
switch ((int) script) |
||||
{ |
||||
case HB_SCRIPT_ADLAM: |
||||
case HB_SCRIPT_ARABIC: |
||||
case HB_SCRIPT_CHORASMIAN: |
||||
case HB_SCRIPT_HANIFI_ROHINGYA: |
||||
case HB_SCRIPT_KAITHI: |
||||
case HB_SCRIPT_MANDAIC: |
||||
case HB_SCRIPT_MANICHAEAN: |
||||
case HB_SCRIPT_MONGOLIAN: |
||||
case HB_SCRIPT_NKO: |
||||
case HB_SCRIPT_PHAGS_PA: |
||||
case HB_SCRIPT_PSALTER_PAHLAVI: |
||||
case HB_SCRIPT_SOGDIAN: |
||||
case HB_SCRIPT_SYRIAC: |
||||
return true; |
||||
|
||||
default: |
||||
return false; |
||||
} |
||||
} |
||||
|
||||
|
||||
#endif /* HB_OT_SHAPE_COMPLEX_ARABIC_JOINING_LIST_HH */ |
||||
|
||||
/* == End of generated function == */ |
Loading…
Reference in new issue