Mercurial > hgrepos > Python2 > PyMuPDF
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 == */") |
