c Lao Keyboard for Tavultesoft Keyboard Manager 3.0 c Totally revised, syllable split rules added, December 93 HOTKEY [SHIFT ALT K_L] BITMAPS LaoKey1,LaoKey0 VERSION 3.0 NAME "Enhanced Lao" c Specify the first group of rules to use in processing begin > use(Constraints) c Define break character (hyphen, d45, optional hyphen, d31, or relocated fixed hyphen d140) store(brk) d45 c Define sets of characters for matching and filtering: basic consonant sets store(Ci) "¢£¥¦§ª«ê¯°±²³µëì»ÍÏÎ" store(Cf) "¡¤¨©­®´" store(Cw) "¸" store(Ch) "¹" store(Co) "º" store(Cr) d249 store(C) "¡¢£¤¥¦§¨©ª«ê­®¯°±²³´µë츹º»ÍÏÎ" d249 c Consonant groups defined for syllableŒsplitting purposes store(Cl) "¡¢£¤¦§ª«ê" store(Cs) "¤¨­´µëì¸" d249 store(Cwo) "¸º" store(Crl) "ëì" store(C#h) "¡¢£¤¥¦§¨©ª«ê­®¯°±²³´µë츺»ÍÎÏ" d249 store(C#wrr) "¡¢£¤¥¦§¨©ª«ê­®¯°±²³´µìº¹»ÍÎÏ" store(C#s) "¡¢£¥¦§©ª«ê®¯°±²³¹º»ÍÏÎ" store(C#rr) "¡¢£¤¥¦§¨©ª«ê­®¯°±²³´µì¸¹º»ÍÏÎ" c Consonant groups defined for character selection and filtering store(Cd) "¤Í" d249 c Keyboard equivalents (of basic consonant characters) store(CK) "d07'9l-pf84mo[xz/r2,1i];svI~" c Combination sets needed for syllable splitting store(VaT) outs(Va) outs(T) store(VaT#2) outs(Va#2) outs(T) store(VaTCS) outs(VaT) outs(C) outs(S) store(Cih#so) "¢£¥¦§ª«ê¯°±²³¹»ÍÏÎ" store(C#hk) "¥¨©­®¯°±²³´µë츺»ÍÎÏ" store(VoT) outs(Vo) outs(T) store(VaCwo) outs(Va) outs(Cwo) store(VaTC#hS) outs(VaT) outs(C#h) outs(S) store(X) outs(C) outs(V) outs(T) c store(L) outs(X) outs(S) c Part 1: Constraints group(Constraints) using keys c Exceptions to illegal key sequences "¾" + "t" > context use(Check1) c Test for sequences such as À¡¾½ any(Vg) + "k" > context use(Check2) c Test for sequences such as À¹ìö¾ d246 any(T) + "k" > context use(Check3) "¾" + any(VqK) > index(Vam,2) use(Split) c Test for sequences such as Ò ¾ any(Vq) + "k" > index(Vam,1) use(Split) c Test for sequences such as ¾ Ò any(Vsh) + "P" > context use(Main) c Allow sala -oy after -a- c Illegal key sequences any(T) + any(TK) > context beep any(Vb) + any(TK) > context beep any(Vs) + any(TK) > context beep any(Vc) + any(TK) > context beep any(Vb) + any(VK) > context beep any(Va) + any(VaK) > context beep nomatch > use(Main) group(Check1) using keys "À" any(C) "¾" + "t" > context + "½" "À¹" any(Cs) "¾" + "t" > context + "½" "À" any(Cl) "¸¾" + "t" > context + "½" match > use(Split) nomatch > beep group(Check2) using keys "À" any(C) any(Vg) + "k" > context + "¾" "À¹" any(Cs) any(Vg) + "k" > context + "¾" "À" any(Cl) "¸" any(Vg) + "k" > context + "¾" match > use(Split) nomatch > beep group(Check3) using keys "À" any(C) d246 any(T) + "k" > context + "¾" "À¹" any(Cs) d246 any(T) + "k" > context + "¾" "À" any(Cl) "¸" d246 any(T) + "k" > context + "¾" match > use(Split) nomatch > beep c Part 2: Unambiguous key conversions group(Main) using keys + any(CK) > index(C,1) + any(VK) > index(V,1) + any(TK) > index(T,1) c will always be lowered, unless raised later + any(SK) > index(S,1) + any(PK) > index(P,1) + any(NK) > index(N,1) d205 + any(NK) > index(NLao,2) + "{" > "Œ-" outs(brk) c 140 + hyphen (hyphen is invisible!) + "\" > outs(brk) c 31; syllable break character c Exit here unless the character was Lao match > use(Combine) c Part 3: Combination, tone raising, and reordering rules (acting on context only) group(Combine) any(Cd) any(Vu) > index(Cd,1) index(Vul,2) c lower subscript vowels where needed any(Cd) any(Vu) any(X) > index(Cd,1) index(Vul,2) index(X,3) c allow for second pass d190 d240 > d191 use(Combine) c allow for other combinations with tone marks d240 d190 > d191 use(Combine) any(T) d191 > d191 index(T,1) use(Combine) d191 d200 > d212 d191 d201 > d213 d190 d210 > d212 d190 d211 > d213 d185 d249 > d205 d185 any(VoT) d249 > d205 index(VoT,2) any(VoT) d249 > d249 index(VoT,1) use(Combine) any(T) d249 > d249 index(T,1) use(Combine) any(VoT) d249 any(X) > d249 index(VoT,1) index(X,3) use(Combine) any(T) any(Vo) > index(Vo,2) index(T,1) use(Combine) any(Vo#u) any(Tl) > index(Vo#u,1) index(Th,2) use(Combine) c added use() 17/3 any(Vo#u) d250 > index(Vo1#u,1) c added 17/3/94 any(Vo#u) d251 > index(Vo2#u,1) c added 17/3/94 match > use(Split) nomatch > use(Split) c Part 6: Syllable splitting group(Split) any(VaTCS) any(Cih#so) > index(VaTCS,1) outs(brk) index(Cih#so,2) c rule 1 any(VaT#2) any(C) any(VaT) > index(VaT#2,1) outs(brk) index(C,2) index(VaT,3) c rule 2 any(C#hk) any(C#rr) any(VaT) > index(C#hk,1) outs(brk) index(C#rr,2) index(Vat,3) c rule 3a any(X) any(Vb) > index(X,1) outs(brk) index(Vb,2) c rule 4 any(V2) any(Cf) any(C) > index(V2,1) index(Cf,2) outs(brk) index(C,3) c rule 5 any(Vsc1) any(C) > index(Vsc1,1) outs(brk) index(C,2) c rule 6 any(V3) any(C) any(VaT) > index(V3,1) outs(brk) index(C,2) index(VaT,3) c rule 7 any(Cl) any(C#wrr) any(VaT) > index(Cl,1) outs(brk) index(C#wrr,2) index(VaT,3) c rule 8 any(Vi) any(C) any(T) any(X) > index(Vi,1) index(C,2) index(T,3) outs(brk) index(X,4) c rule 9 any(Vi) any(C#hk) any(C) > index(Vi,1) index(C#hk,2) outs(brk) index(C,3) c rule 10 any(Vo1) any(C) > index(Vo1,1) outs(brk) index(C,2) c rule 11 any(VaTC#hS) any(Crl) > index(VaTC#hS,1) outs(brk) index(Crl,2) c rule 12 any(Vo2) any(T) any(C) any(X) > index(Vo2,1) index(T,2) index(C,3) outs(brk) index(X,4) c rule 13 any(Vg) any(T) any(Vx) any(C) > index(Vg,1) index(T,2) index(Vx,3) outs(brk) index(C,4) c rule 14 any(Va) any(C) any(Cwo) any(Cf) > index(Va,1) outs(brk) index(C,2) index(Cwo,3) index(Cf,4) c rule 15 any(Vo1) any(T) any(X) > index(Vo1,1) index(T,2) outs(brk) index(X,3) c rule 16 any(Vg) any(Vx) any(C) > index(Vg,1) index(Vx,2) outs(brk) index(C,3) c rule 17 any(C) "º" any(VoT) > index(C,1) outs(brk) "º" index(Vot,3) c rule 18 any(S) any(X) > index(S,1) outs(brk) index(X,2) c rule 19 any(X) "ºº" any(Cf) > index(X,1) outs(brk) "ºº" index(Cf,4) c rule 20 any(Vi) any(Cl) any(C#wrr) >index(Vi,1) index(Cl,2) outs(brk) index(C#wrr,3) c rule 21 "¹" any(C#s) any(VaT) > "¹" outs(brk) index(C#s,2) index(VaT,3) c rule 22 any(Vi) "¹" any(C#s) >index(Vi,1) "¹" outs(brk) index(C#s,3) c rule 23 "ºº" any(VaCwo) > "º" outs(brk) "º" index(VaCwo,3) c rule 24 any(Vi) "¹" any(Cs) any(Va) > index(Vi,1) "¹" outs(brk) index(Cs,3) index(Va,4) c rule 25 any(Vi) "¹"any(Cs) any(T) any(Va) > index(Vi,1) "¹" outs(brk) index(Cs,3) index(T,4) index(Va,5) c rule 26 any(Vsh) any(Cwo) any(Cf) any(C) > index(Vsh,1) index(Cwo,2) index(Cf,3) outs(brk) index(C,4) c rule 27 any(Ve) any(C) any(Vsh) "¸" any(C) > index(Ve,1) index(C,2) index(Vsh,3) "¸" outs(brk) index(C,5) c rule 28