| """fontTools.misc.encodingTools.py -- tools for working with OpenType encodings. |
| """ |
| |
| from __future__ import print_function, division, absolute_import |
| from fontTools.misc.py23 import * |
| 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 |