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