CFSWString chars_to_phones_part_I(CFSWString &s) { CFSWString res; for (INTPTR i = 0; i < s.GetLength(); i++) { CFSWString c = s.GetAt(i); if (c == L']') { CFSWString t = CFSWString(s.GetAt(i - 1)).ToUpper(); res.SetAt(res.GetLength() - 1, t.GetAt(0)); //vaatab taha; pole kindel, et kas on vajalik t = CFSWString(s.GetAt(i - 2)).ToUpper(); if (can_palat(t)) { res.SetAt(res.GetLength() - 2, t.GetAt(0)); t = CFSWString(s.GetAt(i - 3)).ToUpper(); if (can_palat(t)) { res.SetAt(res.GetLength() - 2, t.GetAt(0)); } } //vaatab ette t = CFSWString(s.GetAt(i + 1)).ToUpper(); if (can_palat(t)) { s.SetAt(i + 1, t.GetAt(0)); t = CFSWString(s.GetAt(i + 2)).ToUpper(); if (can_palat(t)) { s.SetAt(i + 2, t.GetAt(0)); } } } else if (c == L'<') { CFSWString t = CFSWString(s.GetAt(i + 1)).ToUpper(); s.SetAt(i + 1, t.GetAt(0)); } else if (c == L'?') { }//Ebanormaalne rõhk. Pärast vaatab, mis teha else if (c == L'x') res += L"ks"; else if (c == L'y') res += L"i"; else if (c == L'w') res += L"v"; else if (c == L'z') res += L"ts"; else if (c == L'c') { res += L"k"; } else if (c == L'ü' && is_vowel(s.GetAt(i + 1)) && s.GetAt(i - 1) == L'ü') res += L"i"; else res += c; } return res; }
CFSWString chars_to_phones_part_I(CFSWString &s) { /* müüa -> müia siia? Kuna vältemärgi nihutamise reeglid on ehitatud selliselt, et kohati kasutatakse foneeme ja kohati ei, siis tuleb täht->foneem teisendus teha kahes jaos. Palataliseerimine põhineb ideel, et palataliseeritud foneemi ümbruses ei saa olla palataliseeruvaid mittepalataliseeritud foneeme :D */ CFSWString res; for (INTPTR i = 0; i < s.GetLength(); i++) { CFSWString c = s.GetAt(i); if (c == L']') { CFSWString t = CFSWString(s.GetAt(i - 1)).ToUpper(); res.SetAt(res.GetLength() - 1, t.GetAt(0)); //vaatab taha; pole kindel, et kas on vajalik t = CFSWString(s.GetAt(i - 2)).ToUpper(); if (can_palat(t)) { res.SetAt(res.GetLength() - 2, t.GetAt(0)); t = CFSWString(s.GetAt(i - 3)).ToUpper(); if (can_palat(t)) { res.SetAt(res.GetLength() - 2, t.GetAt(0)); } } //vaatab ette t = CFSWString(s.GetAt(i + 1)).ToUpper(); if (can_palat(t)) { s.SetAt(i + 1, t.GetAt(0)); t = CFSWString(s.GetAt(i + 2)).ToUpper(); if (can_palat(t)) { s.SetAt(i + 2, t.GetAt(0)); } } } else if (c == L'<') { CFSWString t = CFSWString(s.GetAt(i + 1)).ToUpper(); s.SetAt(i + 1, t.GetAt(0)); } else if (c == L'?') { }//Ebanormaalne rõhk. Pärast vaatab, mis teha else if (c == L'x') res += L"ks"; else if (c == L'y') res += L"i"; else if (c == L'w') res += L"v"; else if (c == L'z') res += L"ts"; else if (c == L'c') { res += L"k"; } else if (c == L'ü' && is_vowel(s.GetAt(i + 1)) && s.GetAt(i - 1) == L'ü') res += L"i"; else if (c == L'q') { if (is_vowel(s.GetAt(i + 1))) { res += L"k"; s.SetAt(i + 1, L'v'); } else res += L"k"; } else res += c; } return res; }