# Source code for fontTools.misc.encodingTools

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