"""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