TshetUinhEncoder.韻鏡位置 的原始碼

# -*- coding: utf-8 -*-

import re

from . import 常量
from .轉換 import 韻目到韻

_韻鏡母位置表 = [
    '脣音第一位', '脣音第二位', '脣音第三位', '脣音第四位',
    '舌音第一位', '舌音第二位', '舌音第三位', '舌音第四位',
    '牙音第一位', '牙音第二位', '牙音第三位', '牙音第四位',
    '齒音第一位', '齒音第二位', '齒音第三位', '齒音第四位', '齒音第五位',
    '喉音第一位', '喉音第二位', '喉音第三位', '喉音第四位',
    '舌齒音第一位', '舌齒音第二位',
]

_韻鏡母位置到韻鏡母號映射表 = {韻鏡母位置: 韻鏡母號 for 韻鏡母號, 韻鏡母位置 in enumerate(_韻鏡母位置表)}

_韻鏡母表 = [
    '幫非', '滂敷', '並奉', '明微',
    '端知', '透徹', '定澄', '泥孃',
    '見', '溪', '羣', '疑',
    '精照', '清穿', '從牀', '心審', '邪禪',
    '影', '曉', '匣', '喻',
    '來', '日',
]

_韻鏡母到韻鏡母號映射表 = {}

for 韻鏡母號, 韻鏡母 in enumerate(_韻鏡母表):
    _韻鏡母到韻鏡母號映射表[韻鏡母] = 韻鏡母號
    if len(韻鏡母) > 1:
        for 韻鏡母單字 in 韻鏡母:
            _韻鏡母到韻鏡母號映射表[韻鏡母單字] = 韻鏡母號

_韻鏡所有母 = ''.join(_韻鏡母表)

解析韻鏡位置描述 = re.compile('([%s])([%s])?([%s])([%s])([%s])' % (_韻鏡所有母, 常量.所有呼, 常量.所有等, 常量.所有韻, 常量.所有聲))

[文件] class 韻鏡位置: ''' 韻鏡位置。 ''' def __init__(self, 韻鏡母: str | int, 韻鏡開合: str | None, 韻鏡等: str, : str, : str) -> None: # normalize 母 # - 韻鏡母號(0-22,從右至左計數) # - 韻鏡母位置(脣音第一位,etc) # - 韻鏡母 # - 精照,etc # - 精,照,etc 韻鏡母號 = _韻鏡母位置到韻鏡母號映射表.get(韻鏡母, _韻鏡母到韻鏡母號映射表.get(韻鏡母)) if 韻鏡母號 is not None: self.韻鏡母號 = 韻鏡母號 else: assert isinstance(韻鏡母, int), 'Unexpected 韻鏡母: ' + repr(韻鏡母) self.韻鏡母號 = 韻鏡母 # normalize 開合 # - 韻鏡轉號 # - 韻鏡開合(開、合、None) 韻1 = 韻目到韻() if 韻1 in 常量.必爲開口的韻: 韻鏡開合 = '開' elif 韻1 in 常量.必爲合口的韻: 韻鏡開合 = '合' elif 韻1 in 常量.開合兼備的韻: assert 韻鏡開合 != None, 韻鏡開合 elif 韻1 in 常量.開合中立的韻: 韻鏡開合 = None self.韻鏡開合 = 韻鏡開合 self.韻鏡等 = 韻鏡等 # normalize 韻 self. = 韻目到韻() self. = @property def 韻鏡母(self) -> str: return _韻鏡母表[self.韻鏡母號] @property def 最簡韻鏡母(self) -> str: 韻鏡母號 = self.韻鏡母號 韻鏡母 = self.韻鏡母 if 0 <= 韻鏡母號 < 4: # 幫非組 return 韻鏡母[self.韻鏡等 == '三' and self. in 常量.輕脣韻] if 4 <= 韻鏡母號 < 8 or 12 <= 韻鏡母號 < 17: # 端知組、精照組 return 韻鏡母[self.韻鏡等 in '二三'] return 韻鏡母
[文件] @staticmethod def from描述(描述: str): match = 解析韻鏡位置描述.fullmatch(描述) assert match is not None, 'Invalid 描述: ' + repr(描述) , 韻鏡開合, 韻鏡等, , = match.groups() return 韻鏡位置(, 韻鏡開合, 韻鏡等, , )
@property def 描述(self) -> str: return self.最簡韻鏡母 + (self.韻鏡開合 or '') + self.韻鏡等 + self. + self. def __repr__(self) -> str: return f'<韻鏡位置 {self.描述}>' def __eq__(self, that) -> bool: if not isinstance(that, 韻鏡位置): return False return self.描述 == that.描述 def __hash__(self) -> int: return hash(self.描述)