It works! Wow! Thank you so much!
I spent hours reading rule guides and asking every AI I could find.
One simple, brilliant rule did the trick! Thank you again. I’m absolutely going to apply this to my keyboard rules.
I worked on this for hours and managed a partial workaround. Here’s my clunky (but also working!) method, lol.
store(vowels) 'aeiouwAEIOUW'
store(tones) 'bdgjmsvBDGJMSV'
store(diacritics) U+0304 U+030C U+0308 U+0300 U+0303 U+0302 U+0301 U+0304 U+030C U+0308 U+0300 U+0303 U+0302 U+0301 U+0304 U+030C U+0308 U+0300 U+0303 U+0302 U+0301 c Corresponding diacritical marks (3x) for each tone in 'tones'
c Rules for double vowels to 'ng' endings
'aa' + any(tones) > context(1) index(diacritics, 3) 'ng'
'Aa' + any(tones) > context(1) index(diacritics, 3) 'ng'
'aA' + any(tones) > context(1) index(diacritics, 3) 'ng'
'AA' + any(tones) > context(1) index(diacritics, 3) 'NG'
'ee' + any(tones) > context(1) index(diacritics, 3) 'ng'
'Ee' + any(tones) > context(1) index(diacritics, 3) 'ng'
'eE' + any(tones) > context(1) index(diacritics, 3) 'ng'
'EE' + any(tones) > context(1) index(diacritics, 3) 'NG'
'oo' + any(tones) > context(1) index(diacritics, 3) 'ng'
'Oo' + any(tones) > context(1) index(diacritics, 3) 'ng'
'oO' + any(tones) > context(1) index(diacritics, 3) 'ng'
'OO' + any(tones) > context(1) index(diacritics, 3) 'NG'
'ww' + any(tones) > context(1) index(diacritics, 3) 'ng'
'Ww' + any(tones) > context(1) index(diacritics, 3) 'ng'
'wW' + any(tones) > context(1) index(diacritics, 3) 'ng'
'WW' + any(tones) > context(1) index(diacritics, 3) 'NG'
'ang' + any(tones) > context(1) index(diacritics, 4) 'ng'
'Ang' + any(tones) > context(1) index(diacritics, 4) 'ng'
'aNg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'ANg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'aNG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'AnG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'AgN' + any(tones) > context(1) index(diacritics, 4) 'ng'
'ANG' + any(tones) > context(1) index(diacritics, 4) 'NG'
'eng' + any(tones) > context(1) index(diacritics, 4) 'ng'
'Eng' + any(tones) > context(1) index(diacritics, 4) 'ng'
'eNg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'ENg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'enG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'EnG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'eNG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'ENG' + any(tones) > context(1) index(diacritics, 4) 'NG'
'ong' + any(tones) > context(1) index(diacritics, 4) 'ng'
'Ong' + any(tones) > context(1) index(diacritics, 4) 'ng'
'oNg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'ONg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'onG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'OnG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'oNG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'ONG' + any(tones) > context(1) index(diacritics, 4) 'NG'
'wng' + any(tones) > context(1) index(diacritics, 4) 'ng'
'Wng' + any(tones) > context(1) index(diacritics, 4) 'ng'
'wNg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'WNg' + any(tones) > context(1) index(diacritics, 4) 'ng'
'wnG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'WnG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'wNG' + any(tones) > context(1) index(diacritics, 4) 'ng'
'WNG' + any(tones) > context(1) index(diacritics, 4) 'NG'
c Sorted rules by base vowel, then case variations
'ai' + any(tones) > context(1) index(diacritics, 3) context(2)
'Ai' + any(tones) > context(1) index(diacritics, 3) context(2)
'aI' + any(tones) > context(1) index(diacritics, 3) "i"
'AI' + any(tones) > context(1) index(diacritics, 3) context(2)
'au' + any(tones) > context(1) index(diacritics, 3) context(2)
'Au' + any(tones) > context(1) index(diacritics, 3) context(2)
'aU' + any(tones) > context(1) index(diacritics, 3) "u"
'AU' + any(tones) > context(1) index(diacritics, 3) context(2)
'aw' + any(tones) > context(1) index(diacritics, 3) context(2)
'Aw' + any(tones) > context(1) index(diacritics, 3) context(2)
'aW' + any(tones) > context(1) index(diacritics, 3) "w"
'AW' + any(tones) > context(1) index(diacritics, 3) context(2)
c Rule for all single vowels
any(vowels) + any(tones) > context index(diacritics, 2)
store(vowels) 'aeiouw'
store(dipthong) 'iuw'
store(tones) 'bdgjmsv'
store(output) U+0304 U+030C U+0308 U+0300 U+0303 U+0302 U+0301 c Corresponding tone marks for each tone in 'tones'
any(vowels) any(dipthong) + any(tones) > context(1) index(output, 3) context(2)
_/||_