ZWJ is spelling, not rendering
Yansaya and rakaransaya need ZWJ, and its position picks conjunct or touching style. Repaya and other conjuncts are optional.
G-EN-07 … 09
A sourced study of the letter inventory, vowel signs, conjuncts, nasals, phonotactics and sandhi, with a phonetic romanization whose output provably obeys the rules.
| 🧾 | Consolidated rule set | 88 deduplicated rules, each marked HARD (invariant), SOFT (tendency) or STYLE (accepted variants), each citing its sources |
| 📚 | Seven topic studies | About 250 numbered rules with evidence from Unicode, SLS 1134, the ICANN Sinhala script panel, linguistics and NLP papers, and school grammar material |
| ✍️ | Playground | The reference converter, running in your browser. Type a romanization and see each step |
| 🔤 | Letter explorer | All 923 letter forms, their validity status, the rules behind it and how to type each one |
| 🐍 | Python & JS packages | to_sinhala / toSinhala, the inventory and a frequency-based disambiguator. No dependencies |
| 📈 | Verification | Every allowed form is producible, and 3.98 million inputs produce no rule violation |
from sinhala_orthography import to_sinhala
to_sinhala("lankaava") # 'ලංකාව'
to_sinhala("kruura") # 'කෲර'
to_sinhala("lait") # 'ලයිට්'Requires Python 3.9 or later and nothing else. See the Python reference.