#NO FORWARD O-ANG WITHOUT A THAI MUTE/CONSONANT ENDING my $nfw_oang = eval(qr% (?!\p{IsOang}(?! (?:\p{InThaiFinCons}){1,2} (?![\p{InThaiCompVowel}\p{InThaiPostVowel}\p{InThaiTone}]) (?:\p{InThaiMute}) ))%); #INITIAL CONSONANT(S) my $initialconsonant = eval(qr% (?: (?: (?:\p{InThaiDualC1}) (?:\p{InThaiDualC2}) ) | (?:\p{InThaiCons}) )%); #### my $space = q':ThIsWiLlBeAsPaCe:'; my $syllables = $text =~ s/ ( #SORT SYLLABLES BY VOWEL LENGTH CATEGORY #MATCH LONGEST FIRST #------------------------------------------------ (?: #Compound four-character vowels (three of them) (?:\p{IsSarae}) #SARA-E PRE-VOWEL (?:\p{InThaiCons}){1,2} #CONSONANT(S) (?:\p{InThaiTone})? #OPTIONAL TONE MARK (DEP. ON TYPING ORDER) (?:[\p{IsSaraii}\p{IsSarauee}]) #ONE OF THESE COMP. VOWELS (?:\p{InThaiTone})? #OPTIONAL TONE MARK (DEP. ON TYPING ORDER) (?:[\p{IsOang}\p{IsYoyak}]). #ONE OF THESE (?:[\p{IsSaraa}\p{IsWowaen}]). #THE SHORTENING VOWEL -or- WO-WAEN ) #NOTE: The wo-waen version not on standard vowel charts | #------------------------------------------------ (?: #Compound three-character vowels (six of them) (?: #With pre-vowel & comp. vowel, no shortening post-vowel (2) (?:\p{IsSarae}) #SARA-E PRE-VOWEL (?:\p{InThaiCons}){1,2} #CONSONANT(S) (?:\p{InThaiTone})? #OPTIONAL TONE MARK (DEP. ON TYPING ORDER) (?:[\p{IsSaraii}\p{IsSarauee}]) #ONE OF THESE COMP. VOWELS (?:\p{InThaiTone})? #OPTIONAL TONE MARK (DEP. ON TYPING ORDER) (?:[\p{IsOang}\p{IsYoyak}]) #ONE OF THESE (?:\p{InThaiFinCons}){0,3} #OPTIONAL SYLLABLE-ENDING CONSONANT(S) (?![\p{InThaiCompVowel}\p{InThaiPostVowel}\p{InThaiTone}]) #NOT ONE OF THESE!!! ${nfw_oang} # <---- VARIABLE HERE !!! (?:\p{InThaiMute})? #OPTIONAL THAI MUTE CHARACTER (GARAN) ) ) # [ SNIP ] | #------------------------------------------------ (?: #Single-character vowels (eighteen of them) (?: #Pre-consonant "I" vowels (2) (?:[\p{IsSaraaimaimuan}\p{IsSaraaimaimalai}]) #"I" PRE-VOWEL ${initialconsonant} # <---- VARIABLE HERE !!! (?![\p{InThaiCompVowel}\p{InThaiPostVowel}]) #NOT ONE OF THESE!!! (?:\p{InThaiTone})? #OPTIONAL TONE MARK ) ) ) /$space.$1.$space/egx; $text =~ s!(?:$space)+! !g;