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