Khmer pronunciation module. See {{km-IPA}}
.
Module:km-pron/testcases/data stores the testcase data.
12 of 195 tests failed. (refresh)
Text | Expected | Actual | Differs at | |
---|---|---|---|---|
ក្បាល | kɓaːl | kɓaːl | ||
ស្អែក | sʔaek | sʔaek | ||
ផ្សេង | pʰseiŋ | pʰseːŋ | 23 | |
ល្មម | lmɔːm | lmɔːm | ||
ភ្ជុំ | pʰcum | pʰcum | ||
ម្នាស់ | mnŏəh | mnŏəh | ||
ផ្ទះ | pʰtĕəh | pʰtĕəh | ||
ខ្ញុំ | kɲom | kɲom | ||
ប្ដី | pɗəj | pɗəj | ||
ឆ្វេង | cʰʋeiŋ | cʰʋeːŋ | 23 | |
ហ្វឹក | fək | fək | ||
ឡាន | laːn | laːn | ||
ឃាត់ | kʰŏət | kʰŏət | ||
ខាត់ | kʰat | kʰat | ||
ញាំ | ɲŏəm | ɲŏəm | ||
ល្ហុង | lhoŋ | lhoŋ | ||
សព្វ (respelling: សប់) | sɑp | sɑp | ||
អ្នក (respelling: នាក់) | nĕəʔ | nĕəʔ | ||
លក់ | lŭəʔ | lŭəʔ | ||
សង្កាត់ | sɑŋ.ˈkat | sɑŋ.ˈkat | ||
ទម្ងន់ | tum.ˈŋŭən | tum.ˈŋŭən | ||
ម្ញ៉ិកម្ញ៉ក់ | mɲək.ˈmɲɑʔ | mɲək.ˈmɲɑʔ | ||
ប្រយ័ត (respelling: ប្រយ៉ាត់) | prɑ.ˈjat | prɑ.ˈjat | ||
បារី (respelling: បារ៉ី) | ɓaː.ˈrəj | ɓaː.ˈrəj | ||
កន្លែង (respelling: កន្ល៉ែង) | kɑn.ˈlaeŋ | kɑn.ˈlaeŋ | ||
ស្រលាញ់ (respelling: ស្រ-ល៉ាញ់, ស្រ'-ល៉ាញ់) | srɑ.ˈlaɲ, srə.ˈlaɲ | srɑ.ˈlaɲ, srə.ˈlaɲ | ||
គំនិត | kum.ˈnɨt | kum.ˈnɨt | ||
ត្រជាក់ | trɑ.ˈcĕəʔ | trɑ.ˈcĕəʔ | ||
ជណ្ដើរ | cŭən.ˈɗaə | cŭən.ˈɗaə | ||
ទំហំ (respelling: ទំហ៊ំ) | tum.ˈhum | tum.ˈhum | ||
វិហារ (respelling: វិហ៊ា) | ʋi.ˈhiə | ʋi.ˈhiə | ||
បវត្តិ (respelling: ប៉ៈវ័ត) | paʔ.ˈʋŏət | paʔ.ˈʋŏət | ||
ចេតនា (respelling: ចេតៈន៉ា) | cei.taʔ.naː | ceː.taʔ.naː | 21 | |
វេទនា (respelling: វេទៈនា) | ʋeː.tĕəʔ.niə | ʋei.tĕəʔ.niə | 21 | |
សំស្ក្រឹត (respelling: ស័ង-ស្ក្រិត, ស័ង-សៈក្រិត) | saŋ.ˈskrət, saŋ.saʔ.krət | saŋ.ˈskrət, saŋ.saʔ.krət | ||
បន្តក់ | ɓɑn.ˈtɑʔ | ɓɑn.ˈtɑʔ | ||
សាស្ត្រា (respelling: សាស-ស្ត្រា) | saːh.ˈstraː | saːh.ˈstraː | ||
បដិសេធ (respelling: ប៉ៈដិសែត) | paʔ.ɗe.saet | paʔ.ɗe.saet | ||
បរិយោសាន (respelling: ប៉ៈរ៉ិយ៉ោសាន) | paʔ.re.jao.saːn | paʔ.re.jao.saːn | ||
ភ្នែកមាន់ (respelling: ភ្នែក មាន់) | pʰnɛːk ˈmŏən | pʰnɛːk ˈmŏən | ||
ផ្សេងៗ (respelling: ផ្សេងផ្សេង) | pʰseiŋ.ˈpʰseiŋ | pʰseːŋ.ˈpʰseːŋ | 23 | |
កញ្ញា (respelling: ក័ញ្ញ៉ា) | kaɲ.ˈɲaː | kaɲ.ˈɲaː | ||
ភ្នំពេញ (respelling: ភ្នំ ពេញ) | pʰnum ˈpɨɲ | pʰnum ˈpɨɲ | ||
រុក្ខវិថី (respelling: រុកខៈ វិថី) | ruk.kʰaʔ ʋi.tʰəj | ruk.kʰaʔ ʋi.tʰəj | ||
សហរដ្ឋអាមេរិក (respelling: សៈហៈ រ័ត អាមេរិក) | saʔ.haʔ rŏət ʔaː.meː.rɨk | saʔ.haʔ rŏət ʔaː.mei.rɨk | 38 | |
លលក (respelling: ល-លក) | lɔ.ˈlɔːʔ | lɔ.ˈlɔːʔ | ||
របស់ (respelling: រ-បស់, រ'-បស់) | rɔ.ˈɓɑh, rə.ˈɓɑh | rɔ.ˈɓɑh, rə.ˈɓɑh | ||
បរិភោគ (respelling: បរ៉ិភោក) | ɓɑː.re.pʰoːk | ɓɑː.re.pʰoːk | ||
ធំ (respelling: ថុំ) | tʰom | tʰom | ||
វចនានុក្រម (respelling: វៈ-ចៈ-ន៉ា-នុ-ក្រំ) | ʋĕəʔ.caʔ.naː.nu.krɑm | ʋĕəʔ.caʔ.naː.nu.krɑm | ||
សាសន (respelling: សាសៈន៉ៈ) | saː.saʔ.naʔ | saː.saʔ.naʔ | ||
សាសនា (respelling: សា-ស្នា) | saː.ˈsnaː | saː.ˈsnaː | ||
កិរិយា (respelling: កិរិយ៉ា) | ke.ri.jaː | ke.ri.jaː | ||
ល្អូកល្អិន | lʔouk.ˈlʔən | lʔouk.ˈlʔən | ||
ឆ្ងាញ់ | cʰŋaɲ | cʰŋaɲ | ||
ប្រធានាធិបតី (respelling: ប្រ់ធានាធិបប៉ៈដី) | prɑ.tʰiə.niə.tʰɨp.paʔ.ɗəj | prɑ.tʰiə.niə.tʰɨp.paʔ.ɗəj | ||
ឧសភា (respelling: អុសៈភា, អ៊ុសៈភា) | ʔo.saʔ.pʰiə, ʔu.saʔ.pʰiə | ʔo.saʔ.pʰiə, ʔu.saʔ.pʰiə | ||
ហ្វៃហ្វា (respelling: វ៉ៃ-វ៉ា, ហ្វៃ-ហ្វា) | ʋaj.ˈʋaː, faj.ˈfaː | ʋaj.ˈʋaː, faj.ˈfaː | ||
កម្មវិធី (respelling: ក័មវិធី, ក័ម្មៈវិធី, ក័ម្ម៉ៈវិធី) | kam.ʋi.tʰiː, kam.mĕəʔ.ʋi.tʰiː, kam.maʔ.ʋi.tʰiː | kam.ʋi.tʰiː, kam.mĕəʔ.ʋi.tʰiː, kam.maʔ.ʋi.tʰiː | ||
រថ (respelling: រត់) | rŭət | rŭət | ||
កម្ពុជា (respelling: ក័មពុជា) | kam.pu.ciə | kam.pu.ciə | ||
រុស្ស៊ី (respelling: រុស៊ី) | ru.ˈsiː | ru.ˈsiː | ||
ចក្រ (respelling: ច័ក, ច័ក-ក្រៈ-) | caʔ, caʔ.kraʔ. | caʔ, caʔ.kraʔ. | ||
អម្ពិល (respelling: អំពិល) | ʔɑm.ˈpɨl | ʔɑm.ˈpɨl | ||
ចក្រយាន (respelling: ច័ក-ក្រ់-យាន) | caʔ.krɑ.jiən | caʔ.krɑ.jiən |
Text | Expected | Actual | Differs at | |
---|---|---|---|---|
ក្បាល | ក្បាល | ក្បាល | ||
ស្អែក | ស្អែក | ស្អែក | ||
ផ្សេង | ផ្សេង | ផ្សេង | ||
ល្មម | ល្មម | ល្មម | ||
ភ្ជុំ | ភ្ជុំ | ភ្ជុំ | ||
ម្នាស់ | ម្នាស់ | ម្នាស់ | ||
ផ្ទះ | ផ្ទះ | ផ្ទះ | ||
ខ្ញុំ | ខ្ញុំ | ខ្ញុំ | ||
ប្ដី | ប្ដី | ប្ដី | ||
ឆ្វេង | ឆ្វេង | ឆ្វេង | ||
ហ្វឹក | ហ្វឹក | ហ្វឹក | ||
ឡាន | ឡាន | ឡាន | ||
ឃាត់ | ឃាត់ | ឃាត់ | ||
ខាត់ | ខាត់ | ខាត់ | ||
ញាំ | ញាំ | ញាំ | ||
ល្ហុង | ល្ហុង | ល្ហុង | ||
សព្វ (respelling: សប់) | សប់ | សប់ | ||
អ្នក (respelling: នាក់) | នាក់ | នាក់ | ||
លក់ | លក់ | លក់ | ||
សង្កាត់ | ស-ង្កាត់ | ស-ង្កាត់ | ||
ទម្ងន់ | ទ-ម្ងន់ | ទ-ម្ងន់ | ||
ម្ញ៉ិកម្ញ៉ក់ | ម្ញ៉ិក-ម្ញ៉ក់ | ម្ញ៉ិក-ម្ញ៉ក់ | ||
ប្រយ័ត (respelling: ប្រយ៉ាត់) | ប្រ-យ៉ាត់ | ប្រ-យ៉ាត់ | ||
បារី (respelling: បារ៉ី) | បា-រ៉ី | បា-រ៉ី | ||
កន្លែង (respelling: កន្ល៉ែង) | ក-ន្ល៉ែង | ក-ន្ល៉ែង | ||
ស្រលាញ់ (respelling: ស្រ-ល៉ាញ់, ស្រ'-ល៉ាញ់) | ស្រ-ល៉ាញ់, ស្រ'-ល៉ាញ់ | ស្រ-ល៉ាញ់, ស្រ'-ល៉ាញ់ | ||
គំនិត | គំ-និត | គំ-និត | ||
ត្រជាក់ | ត្រ-ជាក់ | ត្រ-ជាក់ | ||
ជណ្ដើរ | ជ-ណ្ដើរ | ជ-ណ្ដើរ | ||
ទំហំ (respelling: ទំហ៊ំ) | ទំ-ហ៊ំ | ទំ-ហ៊ំ | ||
វិហារ (respelling: វិហ៊ា) | វិ-ហ៊ា | វិ-ហ៊ា | ||
បវត្តិ (respelling: ប៉ៈវ័ត) | ប៉ៈ-វ័ត | ប៉ៈ-វ័ត | ||
ចេតនា (respelling: ចេតៈន៉ា) | ចេ-តៈ-ន៉ា | ចេ-តៈ-ន៉ា | ||
វេទនា (respelling: វេទៈនា) | វេ-ទៈ-នា | វេ-ទៈ-នា | ||
សំស្ក្រឹត (respelling: ស័ង-ស្ក្រិត, ស័ង-សៈក្រិត) | ស័ង-ស្ក្រិត, ស័ង-សៈ-ក្រិត | ស័ង-ស្ក្រិត, ស័ង-សៈ-ក្រិត | ||
បន្តក់ | ប-ន្តក់ | ប-ន្តក់ | ||
សាស្ត្រា (respelling: សាស-ស្ត្រា) | សាស-ស្ត្រា | សាស-ស្ត្រា | ||
បដិសេធ (respelling: ប៉ៈដិសែត) | ប៉ៈ-ដិ-សែត | ប៉ៈ-ដិ-សែត | ||
បរិយោសាន (respelling: ប៉ៈរ៉ិយ៉ោសាន) | ប៉ៈ-រ៉ិ-យ៉ោ-សាន | ប៉ៈ-រ៉ិ-យ៉ោ-សាន | ||
ភ្នែកមាន់ (respelling: ភ្នែក មាន់) | ភ្នែក មាន់ | ភ្នែក មាន់ | ||
ផ្សេងៗ (respelling: ផ្សេងផ្សេង) | ផ្សេង-ផ្សេង | ផ្សេង-ផ្សេង | ||
កញ្ញា (respelling: ក័ញ្ញ៉ា) | ក័-ញ្ញ៉ា | ក័-ញ្ញ៉ា | ||
ភ្នំពេញ (respelling: ភ្នំ ពេញ) | ភ្នំ ពេញ | ភ្នំ ពេញ | ||
រុក្ខវិថី (respelling: រុកខៈ វិថី) | រុក-ខៈ វិ-ថី | រុក-ខៈ វិ-ថី | ||
សហរដ្ឋអាមេរិក (respelling: សៈហៈ រ័ត អាមេរិក) | សៈ-ហៈ រ័ត អា-មេ-រិក | សៈ-ហៈ រ័ត អា-មេ-រិក | ||
លលក (respelling: ល-លក) | ល-លក | ល-លក | ||
របស់ (respelling: រ-បស់, រ'-បស់) | រ-បស់, រ'-បស់ | រ-បស់, រ'-បស់ | ||
បរិភោគ (respelling: បរ៉ិភោក) | ប-រ៉ិ-ភោក | ប-រ៉ិ-ភោក | ||
ធំ (respelling: ថុំ) | ថុំ | ថុំ | ||
វចនានុក្រម (respelling: វៈ-ចៈ-ន៉ា-នុ-ក្រំ) | វៈ-ចៈ-ន៉ា-នុ-ក្រំ | វៈ-ចៈ-ន៉ា-នុ-ក្រំ | ||
សាសន (respelling: សាសៈន៉ៈ) | សា-សៈ-ន៉ៈ | សា-សៈ-ន៉ៈ | ||
សាសនា (respelling: សា-ស្នា) | សា-ស្នា | សា-ស្នា | ||
កិរិយា (respelling: កិរិយ៉ា) | កិ-រិ-យ៉ា | កិ-រិ-យ៉ា | ||
ល្អូកល្អិន | ល្អូក-ល្អិន | ល្អូក-ល្អិន | ||
ឆ្ងាញ់ | ឆ្ងាញ់ | ឆ្ងាញ់ | ||
ប្រធានាធិបតី (respelling: ប្រ់ធានាធិបប៉ៈដី) | ប្រ់-ធា-នា-ធិប-ប៉ៈ-ដី | ប្រ់-ធា-នា-ធិប-ប៉ៈ-ដី | ||
ឧសភា (respelling: អុសៈភា, អ៊ុសៈភា) | អុ-សៈ-ភា, អ៊ុ-សៈ-ភា | អុ-សៈ-ភា, អ៊ុ-សៈ-ភា | ||
ហ្វៃហ្វា (respelling: វ៉ៃ-វ៉ា, ហ្វៃ-ហ្វា) | វ៉ៃ-វ៉ា, ហ្វៃ-ហ្វា | វ៉ៃ-វ៉ា, ហ្វៃ-ហ្វា | ||
កម្មវិធី (respelling: ក័មវិធី, ក័ម្មៈវិធី, ក័ម្ម៉ៈវិធី) | ក័ម-វិ-ធី, ក័-ម្មៈ-វិ-ធី, ក័-ម្ម៉ៈ-វិ-ធី | ក័ម-វិ-ធី, ក័-ម្មៈ-វិ-ធី, ក័-ម្ម៉ៈ-វិ-ធី | ||
រថ (respelling: រត់) | រត់ | រត់ | ||
កម្ពុជា (respelling: ក័មពុជា) | ក័ម-ពុ-ជា | ក័ម-ពុ-ជា | ||
រុស្ស៊ី (respelling: រុស៊ី) | រុ-ស៊ី | រុ-ស៊ី | ||
ចក្រ (respelling: ច័ក, ច័ក-ក្រៈ-) | ច័ក, ច័ក-ក្រៈ- | ច័ក, ច័ក-ក្រៈ- | ||
អម្ពិល (respelling: អំពិល) | អំ-ពិល | អំ-ពិល | ||
ចក្រយាន (respelling: ច័ក-ក្រ់-យាន) | ច័ក-ក្រ់-យាន | ច័ក-ក្រ់-យាន |
Text | Expected | Actual | Differs at | |
---|---|---|---|---|
ក្បាល | kbaal | kbaal | ||
ស្អែក | sʼaek | sʼaek | ||
ផ្សេង | phseing | phseeng | 23 | |
ល្មម | lmɔɔm | lmɔɔm | ||
ភ្ជុំ | phcum | phcum | ||
ម្នាស់ | mnŏəh | mnŏəh | ||
ផ្ទះ | phtĕəh | phtĕəh | ||
ខ្ញុំ | khñom | khñom | ||
ប្ដី | pdəy | pdəy | ||
ឆ្វេង | chveing | chveeng | 23 | |
ហ្វឹក | fək | fək | ||
ឡាន | laan | laan | ||
ឃាត់ | khŏət | khŏət | ||
ខាត់ | khat | khat | ||
ញាំ | ñŏəm | ñŏəm | ||
ល្ហុង | lhong | lhong | ||
សព្វ (respelling: សប់) | sɑp | sɑp | ||
អ្នក (respelling: នាក់) | nĕək | nĕək | ||
លក់ | lŭək | lŭək | ||
សង្កាត់ | sɑngkat | sɑngkat | ||
ទម្ងន់ | tumngŭən | tumngŭən | ||
ម្ញ៉ិកម្ញ៉ក់ | mñəkmñɑk | mñəkmñɑk | ||
ប្រយ័ត (respelling: ប្រយ៉ាត់) | prɑyat | prɑyat | ||
បារី (respelling: បារ៉ី) | baarəy | baarəy | ||
កន្លែង (respelling: កន្ល៉ែង) | kɑnlaeng | kɑnlaeng | ||
ស្រលាញ់ (respelling: ស្រ-ល៉ាញ់, ស្រ'-ល៉ាញ់) | srɑlañ, srəlañ | srɑlañ, srəlañ | ||
គំនិត | kumnɨt | kumnɨt | ||
ត្រជាក់ | trɑcĕək | trɑcĕək | ||
ជណ្ដើរ | cŭəndaə | cŭəndaə | ||
ទំហំ (respelling: ទំហ៊ំ) | tumhum | tumhum | ||
វិហារ (respelling: វិហ៊ា) | vihiə | vihiə | ||
បវត្តិ (respelling: ប៉ៈវ័ត) | paʼvŏət | paʼvŏət | ||
ចេតនា (respelling: ចេតៈន៉ា) | ceitaʼnaa | ceetaʼnaa | 21 | |
វេទនា (respelling: វេទៈនា) | veetĕəʼniə | veitĕəʼniə | 21 | |
សំស្ក្រឹត (respelling: ស័ង-ស្ក្រិត, ស័ង-សៈក្រិត) | sangskrət, sangsaʼkrət | sangskrət, sangsaʼkrət | ||
បន្តក់ | bɑntɑk | bɑntɑk | ||
សាស្ត្រា (respelling: សាស-ស្ត្រា) | saahstraa | saahstraa | ||
បដិសេធ (respelling: ប៉ៈដិសែត) | paʼdesaet | paʼdesaet | ||
បរិយោសាន (respelling: ប៉ៈរ៉ិយ៉ោសាន) | paʼreyaosaan | paʼreyaosaan | ||
ភ្នែកមាន់ (respelling: ភ្នែក មាន់) | phnɛɛk mŏən | phnɛɛk mŏən | ||
ផ្សេងៗ (respelling: ផ្សេងផ្សេង) | phseingphseing | phseengphseeng | 23 | |
កញ្ញា (respelling: ក័ញ្ញ៉ា) | kaññaa | kaññaa | ||
ភ្នំពេញ (respelling: ភ្នំ ពេញ) | phnum pɨñ | phnum pɨñ | ||
រុក្ខវិថី (respelling: រុកខៈ វិថី) | rukkhaʼ vithəy | rukkhaʼ vithəy | ||
សហរដ្ឋអាមេរិក (respelling: សៈហៈ រ័ត អាមេរិក) | saʼhaʼ rŏət ʼaameerɨk | saʼhaʼ rŏət ʼaameirɨk | 36 | |
លលក (respelling: ល-លក) | lɔlɔɔk | lɔlɔɔk | ||
របស់ (respelling: រ-បស់, រ'-បស់) | rɔbɑh, rəbɑh | rɔbɑh, rəbɑh | ||
បរិភោគ (respelling: បរ៉ិភោក) | bɑɑrephook | bɑɑrephook | ||
ធំ (respelling: ថុំ) | thom | thom | ||
វចនានុក្រម (respelling: វៈ-ចៈ-ន៉ា-នុ-ក្រំ) | vĕəʼcaʼnaanukrɑm | vĕəʼcaʼnaanukrɑm | ||
សាសន (respelling: សាសៈន៉ៈ) | saasaʼnaʼ | saasaʼnaʼ | ||
សាសនា (respelling: សា-ស្នា) | saasnaa | saasnaa | ||
កិរិយា (respelling: កិរិយ៉ា) | keriyaa | keriyaa | ||
ល្អូកល្អិន | lʼouklʼən | lʼouklʼən | ||
ឆ្ងាញ់ | chngañ | chngañ | ||
ប្រធានាធិបតី (respelling: ប្រ់ធានាធិបប៉ៈដី) | prɑthiəniəthɨppaʼdəy | prɑthiəniəthɨppaʼdəy | ||
ឧសភា (respelling: អុសៈភា, អ៊ុសៈភា) | ʼosaʼphiə, ʼusaʼphiə | ʼosaʼphiə, ʼusaʼphiə | ||
ហ្វៃហ្វា (respelling: វ៉ៃ-វ៉ា, ហ្វៃ-ហ្វា) | vayvaa, fayfaa | vayvaa, fayfaa | ||
កម្មវិធី (respelling: ក័មវិធី, ក័ម្មៈវិធី, ក័ម្ម៉ៈវិធី) | kamvithii, kammĕəʼvithii, kammaʼvithii | kamvithii, kammĕəʼvithii, kammaʼvithii | ||
រថ (respelling: រត់) | rŭət | rŭət | ||
កម្ពុជា (respelling: ក័មពុជា) | kampuciə | kampuciə | ||
រុស្ស៊ី (respelling: រុស៊ី) | rusii | rusii | ||
ចក្រ (respelling: ច័ក, ច័ក-ក្រៈ-) | cak, cakkraʼ | cak, cakkraʼ | ||
អម្ពិល (respelling: អំពិល) | ʼɑmpɨl | ʼɑmpɨl | ||
ចក្រយាន (respelling: ច័ក-ក្រ់-យាន) | cakkrɑyiən | cakkrɑyiən |
--- Reference: 'Khmer pronouncing dictionary: standard Khmer and Phnom Penh dialect'
--- https://unesdoc.unesco.org/ark:/48223/pf0000246360
local export = {}
local gsub = mw.ustring.gsub
local find = mw.ustring.find
local match = mw.ustring.match
local len = mw.ustring.len
local pagename = mw.title.getCurrentTitle().text
local j = "្"
local c = "កខគឃងចឆជឈញដឋឌឍណតថទធនបផពភមយរលវឝឞសហឡអ"
local cMod = "៉៊"
local vIndep = "ឣឤឥឦឧឨឩឪឫឬឭឮឯឰឱឲឳ"
local vDiac = "ាិីឹឺុូួើឿៀេែៃោៅំះៈ័៏"
local vPost = "់"
local apos = "'"
local kmChar = "ក-៹'"
local kmString = "+"
local recessive = ""
local cCapt, cUncapt = "(?)", "?"
local cOptCapt = "(??)"
local cCaptClus = {
"(?)",
"(?" .. j .. cUncapt .. ")",
"(?" .. j .. cUncapt .. j .. cUncapt .. ")",
"(?" .. j .. cUncapt .. j .. cUncapt .. j .. cUncapt .. ")"
}
local vCapt, vCaptB, vCaptM = "()", "()", "(*)"
local cvCapt = "()"
local vPostCapt = "(?)"
local postInit = vCaptM .. cOptCapt .. vPostCapt .. "(" .. apos .. "?)"
local consonants = {
= { class = 1, = { "k", "k" }, = { "k", "k" } },
= { class = 1, = { "kʰ", "k" }, = { "kh", "k" } },
= { class = 2, = { "k", "k" }, = { "k", "k" } },
= { class = 2, = { "kʰ", "k" }, = { "kh", "k" } },
= { class = 2, = { "ŋ", "ŋ" }, = { "ng", "ng" } },
= { class = 1, = { "ŋ", "ŋ" }, = { "ng", "ng" } },
= { class = 1, = { "c", "c" }, = { "c", "c" } },
= { class = 1, = { "cʰ", "c" }, = { "ch", "c" } },
= { class = 2, = { "c", "c" }, = { "c", "c" } },
= { class = 2, = { "cʰ", "c" }, = { "ch", "c" } },
= { class = 2, = { "ɲ", "ɲ" }, = { "ñ", "ñ" } },
= { class = 1, = { "ɲ", "ɲ" }, = { "ñ", "ñ" } },
= { class = 1, = { "ɗ", "t" }, = { "d", "t" } },
= { class = 1, = { "tʰ", "t" }, = { "th", "t" } },
= { class = 2, = { "ɗ", "t" }, = { "d", "t" } },
= { class = 2, = { "tʰ", "t" }, = { "th", "t" } },
= { class = 1, = { "n", "n" }, = { "n", "n" } },
= { class = 1, = { "t", "t" }, = { "t", "t" } },
= { class = 1, = { "tʰ", "t" }, = { "th", "t" } },
= { class = 2, = { "t", "t" }, = { "t", "t" } },
= { class = 2, = { "tʰ", "t" }, = { "th", "t" } },
= { class = 2, = { "n", "n" }, = { "n", "n" } },
= { class = 1, = { "n", "n" }, = { "n", "n" } },
= { class = 1, = { "ɓ", "p" }, = { "b", "p" } },
= { class = 1, = { "p", "p" }, = { "p", "p" } },
= { class = 2, = { "ɓ", "p" }, = { "b", "p" } },
= { class = 1, = { "pʰ", "p" }, = { "ph", "p" } },
= { class = 2, = { "p", "p" }, = { "p", "p" } },
= { class = 2, = { "pʰ", "p" }, = { "ph", "p" } },
= { class = 2, = { "m", "m" }, = { "m", "m" } },
= { class = 1, = { "m", "m" }, = { "m", "m" } },
= { class = 2, = { "j", "j" }, = { "y", "y" } },
= { class = 1, = { "j", "j" }, = { "y", "y" } },
= { class = 2, = { "r", "" }, = { "r", "" } },
= { class = 1, = { "r", "" }, = { "r", "" } },
= { class = 2, = { "l", "l" }, = { "l", "l" } },
= { class = 1, = { "l", "l" }, = { "l", "l" } },
= { class = 2, = { "ʋ", "w" }, = { "v", "w" } },
= { class = 1, = { "ʋ", "w" }, = { "v", "w" } },
= { class = 1, = { "s", "h" }, = { "s", "h" } },
= { class = 1, = { "s", "h" }, = { "s", "h" } },
= { class = 1, = { "s", "h" }, = { "s", "h" } },
= { class = 2, = { "s", "h" }, = { "s", "h" } },
= { class = 1, = { "h", "h" }, = { "h", "h" } },
= { class = 2, = { "h", "h" }, = { "h", "h" } },
= { class = 1, = { "l", "l" }, = { "l", "l" } },
= { class = 1, = { "ʔ", "" }, = { "ʼ", "ʼ" } },
= { class = 2, = { "ʔ", "" }, = { "ʼ", "ʼ" } },
= { class = 1, = { "ɡ", "k" }, = { "g", "k" } },
= { class = 2, = { "ɡ", "k" }, = { "g", "k" } },
= { class = 2, = { "ɡ", "k" }, = { "g", "k" } },
= { class = 1, = { "n", "" }, = { "n", "n" } },
= { class = 1, = { "m", "" }, = { "m", "m" } },
= { class = 1, = { "l", "" }, = { "l", "l" } },
= { class = 1, = { "f", "f" }, = { "f", "f" } },
= { class = 2, = { "f", "f" }, = { "f", "f" } },
= { class = 1, = { "z", "z" }, = { "z", "z" } },
= { class = 2, = { "z", "z" }, = { "z", "z" } },
= { class = 1, = { "", "" }, = { "", "" } },
}
local vowels = {
= { = { "ɑː", "ɔː" }, = { "ɑɑ", "ɔɔ" } },
= { = { "ɑ", "ɔ" }, = { "ɑ", "ɔ" } },
= { = { "ɑ", "ŭə" }, = { "ɑ", "ŭə" } },
= { = { "ɑ", "u" }, = { "ɑ", "u" } }, --before labial finals
= { = { "a", "ŏə" }, = { "a", "ŏə" } },
= { = { "a", "ĕə" }, = { "a", "ĕə" } }, --before velar finals
= { = { "aj", "ɨj" }, = { "ay", "ɨy" } },
= { = { "aə", "ŏə" }, = { "", "ɔə" } },
= { = { "aː", "iə" }, = { "aa", "iə" } },
= { = { "a", "ŏə" }, = { "a", "ŏə" } },
= { = { "a", "ĕə" }, = { "a", "ĕə" } }, --before velar finals
= { = { "eʔ", "iʔ" }, = { "eʼ", "iʼ" } }, --glottal coda only in stressed syllables
= { = { "ə", "ɨ" }, = { "ə", "ɨ" } }, --with non-glottal coda
= { = { "əj", "iː" }, = { "əy", "ii" } },
= { = { "eh", "ih" }, = { "eh", "ih" } }, -- inferred
= { = { "əj", "iː" }, = { "əy", "ii" } },
= { = { "ə", "ɨ" }, = { "ə", "ɨ" } },
= { = { "əh", "ɨh" }, = { "əh", "ɨh" } },
= { = { "əɨ", "ɨː" }, = { "əɨ", "ɨɨ" } },
= { = { "oʔ", "uʔ" }, = { "oʼ", "uʼ" } }, --glottal coda only in stressed syllables
= { = { "o", "u" }, = { "o", "u" }}, --with non-glottal coda
= { = { "oh", "uh" }, = { "oh", "uh" } },
= { = { "ou", "uː" }, = { "ou", "uu" } },
= { = { "əw", "ɨw" }, = { "əw", "ɨw" } },
= { = { "uə", "uə" }, = { "uə", "uə" } },
= { = { "aə", "əː" }, = { "aə", "əə" } },
= { = { "aəh", "əh" }, = { "əh", "" } },
= { = { "ɨə", "ɨə" }, = { "ɨə", "ɨə" } },
= { = { "iə", "iə" }, = { "iə", "iə" } },
= { = { "eː", "ei" }, = { "ee", "ei" } },
= { = { "ə", "ɨ" }, = { "ə", "ɨ" } }, --before palatals
= { = { "eh", "ih" }, = { "eh", "ih" } },
= { = { "ae", "ɛː" }, = { "ae", "ɛɛ" } },
= { = { "aeh", "ɛh" }, = { "eh", "" } },
= { = { "aj", "ɨj" }, = { "ay", "ɨy" } },
= { = { "ao", "oː" }, = { "ao", "oo" } },
= { = { "ɑh", "ŭəh" }, = { "ɑh", "ŭəh" } },
= { = { "aw", "ɨw" }, = { "aw", "ɨw" } },
= { = { "om", "um" }, = { "om", "um" } },
= { = { "ɑm", "um" }, = { "ɑm", "um" } },
= { = { "am", "ŏəm" }, = { "am", "ŏəm" } },
= { = { "aŋ", "ĕəŋ" }, = { "ang", "ĕəng" } },
= { = { "ah", "ĕəh" }, = { "ah", "ĕəh" } },
= { = { "aʔ", "ĕəʔ" }, = { "aʼ", "ĕəʼ" } },
= { = { "ə", "ə" }, = { "ə", "ə" } },
}
local tl = {
= "k", = "kʰ", = "g", = "gʰ", = "ṅ",
= "c", = "cʰ", = "j", = "jʰ", = "ñ",
= "ṭ", = "ṭʰ", = "ḍ", = "ḍʰ", = "ṇ",
= "t", = "tʰ", = "d", = "dʰ", = "n",
= "p", = "pʰ", = "b", = "bʰ", = "m",
= "y", = "r", = "l", = "v",
= "ś", = "ṣ", = "s",
= "h", = "ḷ", = "ʼ",
= "a", = "ā", = "i", = "ī",
= "u", = "uk", = "ū", = "uv",
= "ṛ", = "ṝ", = "ḷ", = "ḹ",
= "e", = "ai", = "o", = "o", = "au",
= "ā", = "i", = "ī", = "ẏ", = "ȳ",
= "u", = "ū", = "ua",
= "oe", = "ẏa", = "ia",
= "e", = "ae", = "ai", = "o", = "au",
= "ṃ", = "ḥ", = "`",
= "″", = "′", = "´", = "ŕ", = "̊",
= "⸗", = "ʿ", = "˘", = "̑", = "̥",
= "🤷", = "ǂ", = "ǁ", = "🤷", = "«",
= "🤷", = "§", = "»", = "",
= "🤷", = "🤷",
= "0", = "1", = "2", = "3", = "4",
= "5", = "6", = "7", = "8", = "9",
= "🤷", = "🤷", = "🤷", = "🤷", = "🤷",
= "🤷", = "🤷", = "🤷", = "🤷", = "🤷",
}
local glottify = {
= 1, = 1, = 1, = 1, = 1, = 1,
= 1, = 1, = 1, = 1, = 1
}
local err = {
= 1, = 1,
}
local ambig = {
= "kh", = "ch", = "th", = "ph",
= "ng",
}
function export.syllabify(text)
text = gsub(text, "()()", "%1-%2")
local seq1 = cvCapt .. cCapt .. vCaptB
while find(text, seq1) do text = gsub(text, seq1, "%1-%2%3") end
return text
end
function export.syl_analysis(syllable)
for ind = 4, 1, -1 do
if match(syllable, "^" .. cCaptClus .. postInit .. "$") then
return match(syllable, "^" .. cCaptClus .. postInit .. "$")
end
end
return nil
end
local function sylRedist(text, block)
for word in mw.ustring.gmatch(text, "+") do
local originalWord = word
local allSyl, syls, newWord = {}, mw.text.split(word, "%-"), {}
for sylId = 1, #syls do
if syls == "" then table.insert(allSyl, {})
else
local set = export.syl_analysis(syls)
if not set or set == "" then return nil end
table.insert(allSyl, { export.syl_analysis(syls) })
if sylId ~= 1 and allSyl == "" and find(allSyl, j) and not block then
allSyl, allSyl =
match(allSyl, "^(+)"),
match(allSyl, "^+" .. j .. "(.+)")
end
if #syls == 2 and sylId == 2 and allSyl .. allSyl == "" then
allSyl = vPost
end
end
end
for sylId = 1, #syls do
table.insert(newWord, table.concat(allSyl))
end
text = gsub(text, (gsub(originalWord, "%-", "%-")), table.concat(newWord, "%-"), 1)
end
return text
end
local function getCons(c1Set)
local c1l, i, consSet = #c1Set, 1, {}
while i < c1l + 1 do
for j = 3, 1, -1 do
local conss = i + j - 1 > c1l and "a" or table.concat(c1Set, "", i, i + j - 1)
if consonants then
table.insert(consSet, conss)
i = i + j
break
end
if j == 1 then return nil end
end
end
return consSet
end
local function initClus(c1, mode)
local fittest, init, cData, pos = "", {}, {}, 1
c1 = gsub(c1, j, "")
if consonants then
local cData = consonants
c1, fittest = cData, cData.class
else
local consSet = getCons(mw.text.split(c1, ""))
if not consSet then return error("Error handling initial " .. c1 .. ".") end
for seq, ch in ipairs(consSet) do
local cData = consonants
fittest = (not find(cData, recessive) and not find(cData, "ng")
or (fittest == "" and seq == #consSet))
and cData.class or fittest
table.insert(init, cData)
end
c1 = table.concat(init)
end
c1 = gsub(c1, "(.)", "p%1")
--Very rare in native/Indic words, worst case can be respelt (ដ្បិត). Keep /d/ for borrowings from French / English (sodium, hydro-).
--c1 = gsub(c1, "(.)", "t%1")
if mode == "ipa" then
c1 = gsub(c1, "p()", "pʰ%1")
c1 = gsub(c1, "pʰ()", "p%1")
c1 = gsub(c1, "t()", "tʰ%1")
c1 = gsub(c1, "tʰ()", "t%1")
c1 = gsub(c1, "k()", "kʰ%1")
c1 = gsub(c1, "kʰ()", "k%1")
c1 = gsub(c1, "c()", "cʰ%1")
c1 = gsub(c1, "cʰ()", "c%1")
end
return c1, fittest
end
local function rime(v1, c2, fittest, red, mode)
if red == apos then v1 = red end
if vowels then return vowels end
c2 = consonants or c2
if ((v1 == "័" or v1 == "ា់") and (find(c2, "") or c2 == "ng")) or
(v1 == "េ" and (find(c2, "") or c2 == "ñ")) or
(v1 == "់" and find(c2, "")) or
((v1 == "ិ" or v1 == "ុ") and c2 ~= "") then
v1 = v1 .. "2"
end
v1 = vowels and vowels or v1
if (glottify and mode == "ipa") and c2 == "k" then c2 = "ʡ" end --proxy
return v1 .. c2
end
function export.convert(text, mode, source)
local block = find(text, "%-")
text = sylRedist(export.syllabify(text), block)
if not text then return nil end
for syllable in mw.ustring.gmatch(text, kmString) do
local unchanged, sylStruc = syllable, {}
local c1, v1, c2, bantak, red = export.syl_analysis(syllable)
if not c1 then return nil end
local fittest
c1, fittest = initClus(c1, mode)
if source == "temp" and (err or err) then
require("Module:debug").track("km-pron/error-prone finals")
end
local v1c2 = rime(v1 .. bantak, c2, fittest, red, mode)
if not v1c2 then return nil end
text = gsub(text, unchanged, c1 .. v1c2, 1)
end
text = gsub(text, "(.%%%-.)", ambig)
text = gsub(text, "%%", "")
text = gsub(text, "%-", ".")
text = gsub(text, "", "-")
text = gsub(text, "ʔ()", "%1")
text = gsub(text, "ŭə%.", "ɔ.")
text = gsub(text, "()%.", "%1.")
text = gsub(text, "ʡ%.s", "k.s")
text = gsub(text, "ʡ", "ʔ")
if mode == "tc" then
text = gsub(text, "%.%.%.", "…")
text = gsub(text, "%.", "")
else
text = gsub(text, "%-", ".")
local readings = {}
for reading in mw.text.gsplit(text, ", ") do
table.insert(readings, (gsub(reading, "^(+)%.(+)$", "%1.ˈ%2")))
end
text = table.concat(readings, ", ")
text = gsub(text, "^(+) (+)$", "%1 ˈ%2")
end
return text
end
-- convert Cŕ to ŕC
local function repha(text)
text = text:gsub("(\225\158)៌","៌%1")
return text
end
local function return_error()
return error("The entry title or respelling contains zero-space width character. Please remove it.")
end
function export.make(frame)
local params = {
= { list = true },
= {},
= { alias_of = "a" },
= { default = pagename },
}
local args = require("Module:parameters").process(frame:getParent().args, params)
local output_text, respellings, transcriptions, ipas = {}, {}, {}, {}
if find(pagename, "") then return_error() end
if #args == 0 then args = { args.word } end
for _, param in ipairs(args) do
if find(param, "") then return_error() end
table.insert(respellings, export.syllabify(param))
table.insert(transcriptions, export.convert(param, "tc", "temp"))
table.insert(ipas, export.convert(param, "ipa"))
end
separate = (gsub(table.concat(respellings), "", "")) ~= args.word
respelling = table.concat(respellings, " / ")
local function row(a, b, class, lang, size)
return "\n<tr>" ..
tostring( mw.html.create( "td" )
:css( "padding-right", "0.8em" )
:css( "padding-left", "0.7em" )
:css( "font-size", "10.5pt" )
:css( "color", "#555" )
:css( "font-weight", "bold" )
:css( "background-color", "#F8F9F8" )
:wikitext(a)) .. "\n" ..
tostring( mw.html.create( "td" )
:css( "padding-left", "0.8em" )
:css( "padding-right", "0.8em" )
:css( "padding-top", ".4em" )
:css( "padding-bottom", ".4em" )
:wikitext(b)) ..
"</tr>"
end
local function textFormat(text, class, size, lang)
return tostring( mw.html.create( "span" )
:attr( "class", class or "Khmr" )
:css( "font-size", size or (class == "IPA" and "95%" or "130%") )
:attr( "lang", lang or (class == "IPA" and nil or "km") )
:wikitext(text))
end
table.insert(output_text,
[=[{| style="margin: 0 .4em .4em .4em"
|
<table cellpadding=1 style="border: 1px solid #DFDFDF; text-align: center; line-height: 25pt; padding: .1em .3em .1em .3em">]=] ..
row(separate
and "'']''"
or "'']''",
textFormat(args.word) .. "<br>" .. textFormat(gsub(gsub(repha(args.word), ".", tl), "ʰ̥", "̥ʰ"), "IPA")
) ..
(separate
and row("'']''",
textFormat(respelling) .. "<br>" ..
textFormat(gsub(gsub(respelling, ".", tl), "ʰ̥", "̥ʰ"), "IPA"))
or "") ..
row("'']''",
textFormat(table.concat(transcriptions, ", "), "IPA", "100%")
) ..
row(
"('']'') ]" ..
"<sup>(])</sup>",
textFormat("/" .. table.concat(ipas, "/ ~ /") .. "/", "IPA", "110%")
) ..
(args.a and row("Audio", require("Module:audio").format_audio {
lang = require("Module:languages").getByCode("km"),
file = args.a == "y" and "Km-" .. args.word .. ".ogg" or args.a
}) or ""
) ..
"</table>\n|}" .. "]")
return table.concat(output_text)
end
return export