comparison mupdf-source/thirdparty/harfbuzz/src/gen-arabic-joining-list.py @ 2:b50eed0cc0ef upstream

ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4. The directory name has changed: no version number in the expanded directory now.
author Franz Glasner <fzglas.hg@dom66.de>
date Mon, 15 Sep 2025 11:43:07 +0200
parents
children
comparison
equal deleted inserted replaced
1:1d09e1dec1d9 2:b50eed0cc0ef
1 #!/usr/bin/env python3
2
3 """usage: ./gen-arabic-joining-table.py ArabicShaping.txt Scripts.txt
4
5 Input files:
6 * https://unicode.org/Public/UCD/latest/ucd/ArabicShaping.txt
7 * https://unicode.org/Public/UCD/latest/ucd/Scripts.txt
8 """
9
10 import os.path, sys
11
12 if len (sys.argv) != 3:
13 sys.exit (__doc__)
14
15 files = [open (x, encoding='utf-8') for x in sys.argv[1:]]
16
17 headers = [[f.readline (), f.readline ()] for f in files]
18 while files[0].readline ().find ('##################') < 0:
19 pass
20
21 def read (f):
22 mapping = {}
23 for line in f:
24
25 j = line.find ('#')
26 if j >= 0:
27 line = line[:j]
28
29 fields = [x.strip () for x in line.split (';')]
30 if len (fields) == 1:
31 continue
32
33 uu = fields[0].split ('..')
34 start = int (uu[0], 16)
35 if len (uu) == 1:
36 end = start
37 else:
38 end = int (uu[1], 16)
39
40 t = fields[1]
41
42 for u in range (start, end + 1):
43 mapping[u] = t
44
45 return mapping
46
47 def read_joining_uu (f):
48 values = set ()
49 for line in f:
50
51 if line[0] == '#':
52 continue
53
54 fields = [x.strip () for x in line.split (';')]
55 if len (fields) == 1:
56 continue
57 if fields[2] in {'T', 'U'}:
58 continue
59
60 values.add (int (fields[0], 16))
61
62 return sorted (values)
63
64 def print_has_arabic_joining (scripts, joining_uu):
65
66 print ("static bool")
67 print ("has_arabic_joining (hb_script_t script)")
68 print ("{")
69 print (" /* List of scripts that have data in arabic-table. */")
70 print (" switch ((int) script)")
71 print (" {")
72
73 for script in sorted ({scripts[u] for u in joining_uu if scripts[u] not in {'Common', 'Inherited'}}):
74 print (" case HB_SCRIPT_{}:".format (script.upper ()))
75
76 print (" return true;")
77 print ()
78 print (" default:")
79 print (" return false;")
80 print (" }")
81 print ("}")
82 print ()
83
84 print ("/* == Start of generated function == */")
85 print ("/*")
86 print (" * The following function is generated by running:")
87 print (" *")
88 print (" * ./gen-arabic-joining-list.py ArabicShaping.txt Scripts.txt")
89 print (" *")
90 print (" * on files with these headers:")
91 print (" *")
92 for h in headers:
93 for l in h:
94 print (" * %s" % (l.strip ()))
95 print (" */")
96 print ()
97 print ("#ifndef HB_OT_SHAPER_ARABIC_JOINING_LIST_HH")
98 print ("#define HB_OT_SHAPER_ARABIC_JOINING_LIST_HH")
99 print ()
100
101 print_has_arabic_joining (read (files[1]), read_joining_uu (files[0]))
102
103 print ()
104 print ("#endif /* HB_OT_SHAPER_ARABIC_JOINING_LIST_HH */")
105 print ()
106 print ("/* == End of generated function == */")