|
1 | 1 | #!/bin/env python3
|
2 | 2 |
|
3 | 3 | import os
|
4 |
| -import sys |
5 | 4 | from fontTools.ttLib import TTFont
|
6 | 5 | from fontTools.subset import parse_unicodes, Subsetter
|
7 | 6 |
|
8 |
| -def readSubsetFile(subsetfile): |
9 |
| - subsets = {} |
10 |
| - with open(subsetfile, 'r') as subsethandle: |
11 |
| - for line in subsethandle: |
12 |
| - subname, subrange = line.split() |
13 |
| - unicodes = parse_unicodes(subrange) |
14 |
| - subsets[subname] = (subrange, unicodes) |
15 |
| - return subsets |
| 7 | +def _intoURDict(uranges): |
| 8 | + urdict = {} |
| 9 | + for urname, urange in uranges: |
| 10 | + unicodes = parse_unicodes(urange) |
| 11 | + urdict[urname] = (urange, unicodes) |
| 12 | + return urdict |
16 | 13 |
|
17 |
| -def getDefaultSubsets(): |
18 |
| - subsetfile = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'subsets') |
19 |
| - return readSubsetFile(subsetfile) |
| 14 | +def readURFile(urfile): |
| 15 | + with open(urfile, 'r') as urhandle: |
| 16 | + return [line.split() for line in urhandle] |
| 17 | + |
| 18 | +def getDefaultRanges(): |
| 19 | + uranges = [['cyrillic', 'U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116'], |
| 20 | + ['cyrillic-ext', 'U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,' + |
| 21 | + 'U+A640-A69F,U+FE2E-FE2F'], |
| 22 | + ['devanagari', 'U+0900-097F,U+1CD0-1CF6,U+1CF8-1CF9,U+200B-200D,' + |
| 23 | + 'U+20A8,U+20B9,U+25CC,U+A830-A839,U+A8E0-A8FB'], |
| 24 | + ['greek', 'U+0370-03FF'], |
| 25 | + ['greek-ext', 'U+1F00-1FFF'], |
| 26 | + ['latin', 'U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,' + |
| 27 | + 'U+02DC,U+2000-206F,U+2074,U+20AC,U+2122,U+2212,U+2215'], |
| 28 | + ['latin-ext', 'U+0100-024F,U+0259,U+1E00-1EFF,U+20A0-20CF,U+2C60-2C7F,' + |
| 29 | + 'U+A720-A7FF'], |
| 30 | + ['vietnamese', 'U+0102-0103,U+0110-0111,U+1EA0-1EF9,U+20AB']] |
| 31 | + return uranges |
20 | 32 |
|
21 | 33 | class TTF2Web:
|
22 |
| - def __init__(self, fontfile, subsets, assetdir="assets", fontstyle=None, fontweight=None): |
| 34 | + def __init__(self, fontfile, uranges, assetdir="assets", fontstyle=None, fontweight=None): |
23 | 35 | self.fontfile = fontfile
|
24 | 36 | self.basename = os.path.splitext(os.path.basename(fontfile))[0]
|
25 |
| - self.subsets = subsets |
| 37 | + self.urdict = _intoURDict(uranges) |
26 | 38 | self.assetdir = assetdir
|
27 | 39 |
|
28 | 40 | font = TTFont(fontfile, lazy=True)
|
@@ -58,7 +70,7 @@ def generateCss(self, woff2_list, verbosity=0):
|
58 | 70 | def generateWoff2(self, verbosity=0):
|
59 | 71 | woff2_list = []
|
60 | 72 | os.makedirs(self.assetdir, exist_ok=True)
|
61 |
| - for subname, (subrange, unicodes) in self.subsets.items(): |
| 73 | + for subname, (subrange, unicodes) in self.urdict.items(): |
62 | 74 | if verbosity == 2: print("Processing", subname)
|
63 | 75 | subs = Subsetter()
|
64 | 76 | font = TTFont(self.fontfile)
|
@@ -95,10 +107,10 @@ def main():
|
95 | 107 | help="print more details")
|
96 | 108 | args = parser.parse_args()
|
97 | 109 | if args.urfile:
|
98 |
| - subsets = readSubsetFile(args.urfile) |
| 110 | + uranges = readURFile(args.urfile) |
99 | 111 | else:
|
100 |
| - subsets = getDefaultSubsets() |
101 |
| - t2w = TTF2Web(args.fontfile, subsets) |
| 112 | + uranges = getDefaultRanges() |
| 113 | + t2w = TTF2Web(args.fontfile, uranges) |
102 | 114 | verbosity = 2 if args.verbose else 1
|
103 | 115 | woff2_list = t2w.generateWoff2(verbosity=verbosity)
|
104 | 116 | t2w.generateCss(woff2_list, verbosity=verbosity)
|
|
0 commit comments