# Data updated to OpenType 1.8.2 as of January 2018.

# Complete list of OpenType script tags at:
# https://www.microsoft.com/typography/otspec/scripttags.htm

# Most of the script tags are the same as the ISO 15924 tag but lowercased,
# so we only have to handle the exceptional cases:
# - KATAKANA and HIRAGANA both map to 'kana';
# - spaces at the end are preserved, unlike ISO 15924;
# - we map special script codes for Inherited, Common and Unknown to DFLT.

DEFAULT_SCRIPT = "DFLT"

SCRIPT_EXCEPTIONS = {
    "Hira": "kana",
    "Hrkt": "kana",
    "Laoo": "lao ",
    "Yiii": "yi  ",
    "Nkoo": "nko ",
    "Vaii": "vai ",
    "Zinh": DEFAULT_SCRIPT,
    "Zyyy": DEFAULT_SCRIPT,
    "Zzzz": DEFAULT_SCRIPT,
}

NEW_SCRIPT_TAGS = {
    "Beng": ("bng2",),
    "Deva": ("dev2",),
    "Gujr": ("gjr2",),
    "Guru": ("gur2",),
    "Knda": ("knd2",),
    "Mlym": ("mlm2",),
    "Orya": ("ory2",),
    "Taml": ("tml2",),
    "Telu": ("tel2",),
    "Mymr": ("mym2",),
}

NEW_SCRIPT_TAGS_REVERSED = {
    value: key for key, values in NEW_SCRIPT_TAGS.items() for value in values
}
