73 lines
2.0 KiB
Python
73 lines
2.0 KiB
Python
|
"""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
|