from pycantonese.jyutping.parse_jyutping import parse_jyutping
from pycantonese.util import _deprecate
ONSETS_TIPA = {
"b": "p",
"d": "t",
"g": "k",
"gw": "k\\super w ",
"z": "ts",
"p": "p\\super h ",
"t": "t\\super h ",
"k": "k\\super h ",
"kw": "k\\super w\\super h ",
"c": "ts\\super h ",
"m": "m",
"n": "n",
"ng": "N",
"f": "f",
"h": "h",
"s": "s",
"l": "l",
"w": "w",
"j": "j",
"": "",
}
FINALS_TIPA = {
"i": "i",
"ip": "ip\\textcorner ",
"it": "it\\textcorner ",
"ik": "Ik\\textcorner ",
"im": "im",
"in": "in",
"ing": "IN",
"iu": "iu",
"yu": "y",
"yut": "yt\\textcorner ",
"yun": "yn",
"u": "u",
"ut": "ut\\textcorner ",
"uk": "Uk\\textcorner ",
"un": "un",
"ung": "UN",
"ui": "uY",
"e": "E",
"ek": "Ek\\textcorner ",
"eng": "EN",
"ei": "eI",
"eot": "8t\\textcorner ",
"eon": "8n",
"eoi": "8Y",
"oe": "\\oe ",
"oek": "\\oe k\\textcorner ",
"oeng": "\\oe N",
"o": "O",
"ot": "Ot\\textcorner ",
"ok": "Ok\\textcorner ",
"on": "On",
"ong": "ON",
"oi": "OY",
"ou": "ou",
"ap": "5p\\textcorner ",
"at": "5t\\textcorner ",
"ak": "5k\\textcorner ",
"am": "5m",
"an": "5n",
"ang": "5N",
"ai": "5I",
"au": "5u",
"aa": "a",
"aap": "ap\\textcorner ",
"aat": "at\\textcorner ",
"aak": "ak\\textcorner ",
"aam": "am",
"aan": "an",
"aang": "aN",
"aai": "aI",
"aau": "au",
"m": "\\s{m}",
"ng": "\\s{N}",
}
TONES_TIPA = {
"1": "55",
"2": "25",
"3": "33",
"4": "21",
"5": "23",
"6": "22",
}
[docs]def jyutping_to_tipa(jp_str):
"""Convert Jyutping romanization into LaTeX TIPA.
.. versionadded:: 3.0.0
This function replaces the deprecated equivalent ``jyutping2tipa``.
Parameters
----------
jp_str : str
Jyutping romanization for one or multiple characters
Returns
-------
list[str]
Raises
------
ValueError
If the Jyutping romanization is illegal (e.g., with unrecognized
elements).
Examples
--------
>>> jyutping_to_tipa("gwong2dung1waa2") # 廣東話, Cantonese # doctest: +SKIP
['k\\super w ON25', 'tUN55', 'wa25']
""" # noqa: E501
jp_parsed_list = parse_jyutping(jp_str)
tipa_list = []
for jp_parsed in jp_parsed_list:
# TODO: Separate "final" as "nucleus" and "coda" instead?
tipa = ONSETS_TIPA[jp_parsed.onset] + FINALS_TIPA[jp_parsed.final]
tipa = tipa.strip() + TONES_TIPA[jp_parsed.tone]
tipa_list.append(tipa)
return tipa_list
@_deprecate("jyutping2tipa", "jyutping_to_tipa", "3.0.0", "4.0.0")
def jyutping2tipa(*args, **kwargs):
"""Same as jyutping_to_tipa.
.. deprecated:: 3.0.0
"""
return jyutping_to_tipa(*args, **kwargs)