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