Transcribe(MSyl syl) { string start, end = ""; INIT i = syl.Initial; TONE t = syl.Tone; MED m = syl.Medial; RIME r = syl.Rime; //initial if (i == INIT.Void && m != MED._) //y w yu { return(_m0Trans[new MRt(r, t)]); } else if (syl.InitialGroup == INITGROUP.GGRP && syl.IsPalatized) //j q x { start = _specInit[i]; if (m == MED.IU && syl.Final != FIN.ENG) //ü -> u but not iong { r = (RIME)((byte)MED.U | (byte)syl.Final); //ju qu xu } } else if (syl.InitialGroup == INITGROUP.TZGRP && m == MED.I && syl.Final == FIN.ZERO) //zyi cyi syi { start = _specInit[i]; } else { start = _miTrans[i]; } //final _mfTrans.TryGetValue(new MRt(r, t), out end); return(start + end); }
public MImt(INIT i, MED m = MED._, TONE t = TONE.NEUTRAL) { _syl = new MSyl(i, m, FIN.ZERO, t); }
public MImt(INIT i, MED m = MED._, TONE t = TONE.NEUTRAL) { _syl = new MSyl(i,m,FIN.ZERO,t); }
public MRt(FIN fin, MED med = MED._, TONE tone = TONE.NEUTRAL) { _syl = new MSyl(INIT.Void, med, fin, tone); }
MunchSyllable(string s, ref int idx) { MImt imt; MRt rt; INIT init = 0; MED med = 0; FIN fin = 0; TONE t1 = TONE.NEUTRAL, t2 = TONE.NEUTRAL; bool match = _miDict.TryMatchStart(s, ref idx, out imt); do { if (match) { init = imt.Initial; med = imt.Medial; t1 = imt.Tone; } var iMark = idx; match = _mfDict.TryMatchStart(s, ref idx, out rt); if (match) { t2 = rt.Tone; if (t2 != TONE.NEUTRAL && t1 != TONE.NEUTRAL) { idx = iMark; break; } if (rt.Medial == MED.U) //IU + ONG { if (rt.Final == FIN.ZERO && med == MED.I) //IU { fin = FIN.OU; } else if (rt.Final == FIN.ENG) //ONG { med = med | MED.U; fin = rt.Final; } else { idx = iMark; } } else { fin = rt.Final; if (fin == FIN.Y && med == MED.U) //UI { fin = FIN.EI; } else if (fin == FIN.E && ((med & MED.I) == MED.I)) //ie,üe { fin = FIN.È; } } } } while(false); if (init == 0 && med == 0 && fin == 0) { return(MSyl.Default); } return(new MSyl(init, med, fin, (t1 == TONE.NEUTRAL ? t2 : t1))); }
public MSyl(INIT init, MED med, FIN fin, TONE tone) : this((byte)((byte)init | (byte)tone), (byte)((byte)med | (byte)fin)) { }
static public bool IsPalatized(this MED med) { return((med & MED.I) == MED.I); }