Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/harfbuzz/src/gen-os2-unicode-ranges.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 """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 ("""};""") |
