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