<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;"># -*- coding: utf-8 -*-
from __future__ import unicode_literals

from pypinyin.standard import convert_finals
from pypinyin.style._constants import (
    _INITIALS, _INITIALS_NOT_STRICT, _FINALS,
    RE_PHONETIC_SYMBOL, PHONETIC_SYMBOL_DICT,
    PHONETIC_SYMBOL_DICT_KEY_LENGTH_NOT_ONE,
    RE_NUMBER
)


def get_initials(pinyin, strict):
    """čŽ·ĺŹ–ĺŤ•ä¸Şć‹Ľéźłä¸­çš„ĺŁ°ćŻŤ.

    :param pinyin: ĺŤ•ä¸Şć‹Ľéźł
    :type pinyin: unicode
    :param strict: ćŻĺ¦ä¸Ąć&nbsp;Ľéµç…§ă€Šć±‰čŻ­ć‹Ľéźłć–ąćˇă€‹ćťĄĺ¤„ç†ĺŁ°ćŻŤĺ’ŚéźµćŻŤ
    :return: ĺŁ°ćŻŤ
    :rtype: unicode
    """
    if strict:
        _initials = _INITIALS
    else:
        _initials = _INITIALS_NOT_STRICT

    for i in _initials:
        if pinyin.startswith(i):
            return i
    return ''


def get_finals(pinyin, strict):
    """čŽ·ĺŹ–ĺŤ•ä¸Şć‹Ľéźłä¸­çš„éźµćŻŤ.

    :param pinyin: ĺŤ•ä¸Şć‹ĽéźłďĽŚć—&nbsp;ĺŁ°č°ć‹Ľéźł
    :type pinyin: unicode
    :param strict: ćŻĺ¦ä¸Ąć&nbsp;Ľéµç…§ă€Šć±‰čŻ­ć‹Ľéźłć–ąćˇă€‹ćťĄĺ¤„ç†ĺŁ°ćŻŤĺ’ŚéźµćŻŤ
    :return: éźµćŻŤ
    :rtype: unicode
    """
    if strict:
        pinyin = convert_finals(pinyin)

    initials = get_initials(pinyin, strict=strict) or ''

    # ćŚ‰ĺŁ°ćŻŤĺ†ĺ‰˛ďĽŚĺ‰©ä¸‹çš„ĺ°±ćŻéźµćŻŤ
    finals = pinyin[len(initials):]

    # ĺ¤„ç†ć—˘ć˛ˇćś‰ĺŁ°ćŻŤäąźć˛ˇćś‰éźµćŻŤçš„ć…ĺ†µ
    if strict and finals not in _FINALS:
        # ĺ¤„ç† y, w ĺŻĽč‡´čŻŻĺ¤çš„é—®é˘ďĽŚćŻ”ĺ¦‚ yo
        initials = get_initials(pinyin, strict=False)
        finals = pinyin[len(initials):]
        if finals in _FINALS:
            return finals
        return ''

    # Ĺ„, á¸ż
    if not finals and not strict:
        return pinyin

    return finals


def replace_symbol_to_number(pinyin):
    """ćŠŠĺŁ°č°ć›żćŤ˘ä¸şć•°ĺ­—"""
    def _replace(match):
        symbol = match.group(0)  # ĺ¸¦ĺŁ°č°çš„ĺ­—ç¬¦
        # čż”ĺ›žä˝żç”¨ć•°ĺ­—ć&nbsp;‡čŻ†ĺŁ°č°çš„ĺ­—ç¬¦
        return PHONETIC_SYMBOL_DICT[symbol]

    # ć›żćŤ˘ć‹Ľéźłä¸­çš„ĺ¸¦ĺŁ°č°ĺ­—ç¬¦
    value = RE_PHONETIC_SYMBOL.sub(_replace, pinyin)
    for symbol, to in PHONETIC_SYMBOL_DICT_KEY_LENGTH_NOT_ONE.items():
        value = value.replace(symbol, to)

    return value


def replace_symbol_to_no_symbol(pinyin):
    """ćŠŠĺ¸¦ĺŁ°č°ĺ­—ç¬¦ć›żćŤ˘ä¸şć˛ˇćś‰ĺŁ°č°çš„ĺ­—ç¬¦"""
    value = replace_symbol_to_number(pinyin)
    return RE_NUMBER.sub('', value)


def has_finals(pinyin):
    """ĺ¤ć–­ćŻĺ¦ćś‰éźµćŻŤ"""
    # éĽ»éźł: 'mĚ„', 'á¸ż', 'mĚ€', 'Ĺ„', 'Ĺ', 'Çą ' ć˛ˇćś‰éźµćŻŤ
    for symbol in ['mĚ„', 'á¸ż', 'mĚ€', 'Ĺ„', 'Ĺ', 'Çą']:
        if symbol in pinyin:
            return False

    return True
</pre></body></html>