1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
"""fontTools.misc.encodingTools.py -- tools for working with OpenType encodings.
"""
import fontTools.encodings.codecs
# Map keyed by platformID, then platEncID, then possibly langID
_encodingMap = {
0: { # Unicode
0: 'utf_16_be',
1: 'utf_16_be',
2: 'utf_16_be',
3: 'utf_16_be',
4: 'utf_16_be',
5: 'utf_16_be',
6: 'utf_16_be',
},
1: { # Macintosh
# See
# https://github.com/fonttools/fonttools/issues/236
0: { # Macintosh, platEncID==0, keyed by langID
15: "mac_iceland",
17: "mac_turkish",
18: "mac_croatian",
24: "mac_latin2",
25: "mac_latin2",
26: "mac_latin2",
27: "mac_latin2",
28: "mac_latin2",
36: "mac_latin2",
37: "mac_romanian",
38: "mac_latin2",
39: "mac_latin2",
40: "mac_latin2",
Ellipsis: 'mac_roman', # Other
},
1: 'x_mac_japanese_ttx',
2: 'x_mac_trad_chinese_ttx',
3: 'x_mac_korean_ttx',
6: 'mac_greek',
7: 'mac_cyrillic',
25: 'x_mac_simp_chinese_ttx',
29: 'mac_latin2',
35: 'mac_turkish',
37: 'mac_iceland',
},
2: { # ISO
0: 'ascii',
1: 'utf_16_be',
2: 'latin1',
},
3: { # Microsoft
0: 'utf_16_be',
1: 'utf_16_be',
2: 'shift_jis',
3: 'gb2312',
4: 'big5',
5: 'euc_kr',
6: 'johab',
10: 'utf_16_be',
},
}
def getEncoding(platformID, platEncID, langID, default=None):
"""Returns the Python encoding name for OpenType platformID/encodingID/langID
triplet. If encoding for these values is not known, by default None is
returned. That can be overriden by passing a value to the default argument.
"""
encoding = _encodingMap.get(platformID, {}).get(platEncID, default)
if isinstance(encoding, dict):
encoding = encoding.get(langID, encoding[Ellipsis])
return encoding
|