#! /usr/bin/python3 # Last edited on 2026-07-03 00:42:54 by stolfi # Defines the bipattern for each crib 'USES', 'QI', etc. def get_bencao_starps_bipattern(kw_en): # Returns the bipattern corresponding to # the English keyword type {kw_en}. # if kw_en == "USES": bipat = ( ( 0.000, '主', 'daiin' ), ( 0.200, '主', 'd[ao]in' ), ( 0.210, '主', 'd[ao]iiin' ), ( 0.400, '主', '[pfkl][ao]ii?i?n' ), ( 0.600, '主', '[rs][ao]ii?i?n' ), ( 0.800, '主', 't[ao]iin' ), ( 0.810, '主', 't[ao]ii?i?n' ), ) elif kw_en == "USE1": # Just '主' and 'daiin': bipat = ( ( 0.000, '主', 'daiin' ), ) elif kw_en == "USEX": # Like USE" but with smaller penalties for alternate keywords: bipat = ( ( 0.000, '主', 'daiin' ), ( 0.050, '主', 'd[ao]in' ), ( 0.060, '主', 'd[ao]iiin' ), ( 0.100, '主', '[pfkl][ao]ii?i?n' ), ( 0.110, '主', '[pfkl][ao]ii?i?n' ), ( 0.200, '主', '[rs][ao]ii?i?n' ), ( 0.400, '主', 't[ao]ii?i?n' ), ) elif kw_en == "LONG-TAKE" or kw_en == "LONG" or kw_en == "TAKE": p_edy_1 = 'q?o[pfk]eedy' p_ain_1 = 'q?o[pfk]aiin' p_edy_2 = 'q?[oy]?[pfk][che][eh][eh]?dy' p_ey_2 = 'q?[oy][kpf]ey' p_ain_2 = 'q?[oy][pfk][ao]ii?i?n' p_edy_3 = 'q?[oy][dlspft][ch][eh][eh]?dy' p_ain_3 = 'q?[oy][dlspft][ao]ii?i?n' p_rched_3 = '[r]ched[ao]?' p_osdaiin_3 = 'q?[oy]s[dlk]aii?n' bipat = ( ( 0.000, '久服|久食', f"{p_edy_1}{p_ain_1}" ), ( 0.050, '久服|久食', f"{p_edy_1}|{p_ain_1}" ), ( 0.100, '久服|久食', f"{p_edy_2}{p_ain_2}|{p_ey_2}{p_edy_2}" ), ( 0.150, '久服|久食', f"{p_edy_2}|{p_ain_2}" ), ( 0.300, '久服|久食', f"{p_edy_3}{p_ain_3}|{p_edy_3}{p_rched_3}|{p_osdaiin_3}" ), ( 0.350, '久服|久食', f"{p_edy_3}|{p_ain_3}|{p_rched_3}" ), ( 0.360, '久服|久食', f"sheyqokey|qokeykeedy" ), ) elif kw_en == "QI": bipat = ( ( 0.000, '气', 'chedy' ), ( 0.100, '气', 'ched[ao]' ), ( 0.300, '气', '[cs]he?[dk][yao]' ), ) elif kw_en == "MAKES": bipat = ( ( 0.000, '令', 'che[oy]dy?' ), ( 0.100, '令', 'ch[eoy]dy?|cheey' ), ( 0.300, '令', '[cs][eh]e?[eo]?[dk]y?' ), ) elif kw_en == "TOOTH": bipat = ( ( 0.000, '齿', 'q?odaiin' ), ( 0.100, '齿', 'q?[oy][dk]ii?n' ), ) elif kw_en == "BLOOD": p_chodaiin_1 = 'chodaiin' p_okaiin_1 = 'q?okaiin' p_okchdy_1 = 'q?okchdy' p_ain_2 = 'q?aii?i?n' p_ok_2 = 'q?o[kpf]' p_oteey_2 = 'q?o[tpf]eey' p_otar_2 = 'q?o[tpf]ar' p_ain_3 = 'q?[oy]ii?i?n' p_ok_3 = 'q?[ol]*[aoy][dlspft]' p_oteey_3 = 'q?[aoy][tk][ec][eh][aoy]' p_otar_3 = 'q?o[tpf]aii?n' bipat = ( ( 0.000, '血', f"{p_chodaiin_1}{p_okaiin_1}|{p_okchdy_1}" ), ( 0.050, '血', f"{p_ain_2}{p_ok_2}|{p_oteey_2}|{p_otar_2}" ), ( 0.100, '血', f"{p_ain_3}{p_ok_3}|{p_oteey_3}|{p_otar_3}" ), ) elif kw_en == "AMENO": p_laiin_1 = 'laiin' p_otedy_1 = 'q?[oy]tedy' p_oteedy_1 = 'q?[oy]teedy' p_okeey_1 = 'q?[oy]keey' p_okaiin_1 = 'q?[oy]kaiin' p_okair_1 = 'q?[oy]kair' p_oshey_1 = 'q?[oy]shey' p_ckhy_1 = 'ckh[oy]' p_aiin_1 = 'aiin' p_otleey_1 = 'q?[oy]tleey' bipat = ( ( 0.000, '血闭', f"{p_laiin_1}{p_otedy_1}|{p_okaiin_1}{p_otedy_1}|{p_oteedy_1}{p_okeey_1}|{p_oshey_1}{p_ckhy_1}|{p_aiin_1}{p_otleey_1}" ), ( 0.100, '血', f"{p_laiin_1}|{p_okaiin_1}|{p_oteedy_1}|{p_oshey_1}|{p_aiin_1}" ), ) elif kw_en == "BOOST-QI": # AHOR = f114r.39 chooedainopchedy # BAMB = f113v.38 raiincheody # BAMB = f104r.39 shedycholkar # BAMB = f113v.21 loarcheos # BAMB = f103v.43 ralyoraiinchary # BAMB = f115r.42 qokeedychols # BAMB = f114r.39 qochosain # BAMB = f107v.16 chkainokaiin # BAMB = f107r.48 otchyqokyotaily # BAMB = f103r.48 sheycheosaiin # BLAR = f114r.4 cheoldchedy # BROO = f115v.18 dalchedy # BROO = f114r.11 dolorshedy # CLAY = f115v.1 ralytchedylched # DEEG = f114r.11 shdolaiin # DEEG = f111v.34 lcheylsheka # DEEG = f107v.20 cholkchedy # DEEG = f112v.39 cheollchedy # DEEG = f113v.42 oraiinotaiin # DEEG = f113r.34 chedyldyyshssheeol # DEEG = f115v.31 shokchyykchedy # DONG = f107v.8 ytainshedy # DONG = f114r.8 chdaiinchedalos # DONG = f105v.29 okchdotardaiin # DONG = f113v.33 rchedyotain # DONG = f113r.34 sheodyshedain # JADE = f107r.4 okchedyqokeedqokearchedy # JADE = f113r.34 rchedyldyyshssheo # JADE = f108r.17 okeedylkaldaiin p_rchedy_1 = 'rchedy' p_schedy_2 = 'schedy' p_rcheda_2 = 'rched[ao]' p_rcheky_3 = 'rche[klr]y' bipat = ( ( 0.000, '益气', f"{p_rchedy_1}" ), ( 0.100, '益气', f"{p_schedy_2}|{p_rcheda_2}" ), ( 0.300, '益气', f"{p_rcheky_3}" ), ) elif kw_en == "KILL": bipat = ( ( 0.000, '杀', "chsd" ), ) elif kw_en == "EAR": bipat = ( ( 0.000, '耳', "okaiin" ), ) else: assert False, f"invalid English keyword {kw_en}" return bipat # ----------------------------------------------------------------------