Coverage for /usr/lib/python3/dist-packages/fontTools/misc/encodingTools.py: 43%

7 statements  

« prev     ^ index     » next       coverage.py v7.9.1, created at 2025-06-14 15:55 +0200

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