c Thai Keyboard for Tavultesoft Keyboard Manager 3.0 c Keyboard: Thai language for use with UPC font coding and WTT2 loose c checking NAME "Thai UPC Loose" VERSION 3.0 BITMAPS Thaikey1 Thaikey0 HOTKEY "^+T" begin > use(Main) c The first line should be a CONTROL line, as follows: c CONTROL"Thai-on;Thai-off;Ctrl+Shift+T" c where ThaiKey1 is the name of the Keyboard-On .bmp (bitmap) file, c ThaiKeyO is the name of the Keyboard-Off .bmp file c and Ctrl+Shift+T is the "hotkey" combination to enable the keyboard. c This control file provides a strict WTT2.0 loose keyboard coding and c checking, and thus is only really suited to the Thai language. c To save space, those stores which can be combined, are. c Tone vowel reordering is not part of WTT2 but the rules are included but c commented. They may be uncommented if tone vowel reordering is wanted. c Comments suggesting that a user might want to comment out a rule or group of c rules are for situations where non-legal Thai typing sequences may need to c be allowed. c The multi-key sequences are not defined in WTT2, they have been arbitrarily c assigned here. c WTT2 Class 2 - NON store(NONK) "Q@#$%*()_+" "W" "XZ3}2MO&Q" '"' store(NON) "" '"' ")(-,/?" "." "" d144 d128 c last three codes are multi-key c tall consonants which move things left store(CtallK) "x/a" store(Ctall) "" c long consonants which move under things down store(ClongK) "PDE{" store(Clong) "" c d161-d206 normal consonants store(CONSK) "d-\8|S'0C=:GRvV" outs(CtallK) outs(ClongK) store(CONS) "" outs(Ctall) outs(Clong) c WTT2 Class 3 - CONS all 44 of them c store(CONSK) outs(CK) outs(CtallK) outs(ClongK) c store(CONS) outs(C) outs(Ctall) outs(Clong) c WTT2 Classes 4-7 LV FV1 FV2 FV3 store(LFVK) "gcF.w" "tke" "1" "A?" store(LFV) "" "" "" "" c WTT2 Class 5 - FV1 sara a?, sara aa, sara am c store(FV1K) "tke" c store(FV1) d208 d210 d211 c WTT2 Class 6 - FV2 lakkhangyao c store(FV2K) "1" c store(FV2) d229 c WTT2 Class 7 - FV3 ligature vowels c store(FV3K) "A?" c store(FV3) c WTT2 Class 8-9 BV1 store(BVK) "6" "^" store(BV) d216 d217 store(BVl) d232 d233 c WTT2 Class 9 - BV2 sara uu c store(BV2K) "^" c store(BV2) d217 c store(BV2l) d233 c WTT2 Class 10 BD phintu store(BDK) "B" store(BD) d218 store(BDl) d233 c WTT2 Class 11-13 TONE AD1 AD2 store(TONEK) "jhUJ" "YN" "H" store(TONE) "" "" "" store(TONEl) "" "" "" store(TONEu) "" "" "" store(TONEul) "" "" "" c WTT2 Class 12 - AD1 nikhahit, thanthakhat c this lot is never referenced independantly of TONE - see TAD1 c in this implementation the AD1 group is never referenced c store(AD1K) "YN" c store(AD1) "" c store(AD1l) "" c store(AD1u) "" c store(AD1ul) "" c WTT2 Class 13 - AD2 maitaikhu c store(AD2K) "H" c store(AD2) d231 c store(AD2l) d154 c WTT2 Class 14 - AD3 yamakkan c No key store since a multi-key sequence store(AD3) d238 c WTT2 Class 15-17 AV1 AV2 AV3 store(AVK) "b" "y7" "un" store(AV) "" "" "" store(AVl) "" "" "" c WTT2 Class 16 - AV2 maihanakat, sara ue? c store(AV2K) "y7" c store(AV2) d209 d214 c store(AV2l) d152 d131 c WTT2 Class 17 - AV3 sara ii, sara uee c store(AV3K) "un" c store(AV3) d213 d215 c store(AV3l) d130 d132 c Some useful combination stores c store(TAD1K) outs(TONEK) outs(AD1K) c store(TAD1) outs(TONE) outs(AD1) c store(TAD1l) outs(TONEl) outs(AD1l) c store(TAD1u) outs(TONEu) outs(AD1u) c store(TAD1ul) outs(TONEul) outs(AD1ul) c store(follK) outs(AV1K) outs(AV2K) outs(AV3K) outs(BV1K) outs(BV2K) outs(BDK) c store(foll) outs(AV1) outs(AV2) outs(AV3) outs(BV1) outs(BV2) outs(BD) c this lot aren't used, but should be considered part of store(foll) for c contexts: c outs(AV1l) outs(AV2l) outs(AV3l) outs(BV1l) outs(BV2l) outs(BDl)\ c outs(AD3) c notice that these stores are never directly referenced c store(upK) outs(TAD1K) outs(AD2K) c store(up) outs(TAD1) outs(TAD1l) outs(TAD1u) outs(TAD1ul) outs(AD2) \ c outs(AD2l) c store(diaK) outs(follK) outs(upK) c store(diaK) outs(follK) outs(TAD1K) outs(AD2K) c this store is never referenced c store(dia) outs(foll) outs(up) group(Main) using keys c Simple rules - key conversions + any(NONK) > index(NON,1) + any(LFVK) > index(LFV,1) + any(CONSK) > index(CONS,1) c Column 2 (above and below vowels) and column 3 following column 1 any(Ctall) + any(AVK) > context index(AVl,2) any(Ctall) + any(TONEK) > context index(TONEl,2) any(Clong) + any(BVK) > context index(BVl,2) any(Clong) + any(BDK) > context index(BDl,2) c These are not strictly allowed in the WTT2 standard, but are included here c for convenience. A diacritic should not be allowed on an empty cell. + any(AVK) > index(AV,1) + any(BVK) > index(BV,1) + any(TONEK) > index(TONE,1) + any(BDK) > index(BD,1) '~' + '3' > d238 c AD3 covered by this rule c Diacritic Contextualisations (column 3 following column 2) c every possible combination must be listed. Add more if you need them. any(BV) + any(TONEK) > context index(TONE,2) any(BV) + any(BDK) > context index(BD,2) c this is legal?! any(BVl) + any(TONEK) > context index(TONE,2) any(BVl) + any(BDK) > context index(BDl,2) c this is legal?! any(AV) + any(TONEK) > context index(TONEu,2) any(AVl) + any(TONEK) > context index(TONEul,2) c Now for tone vowel reordering - just for fun (not part of WTT2) c any(TONE) + any(BVK) > index(BV,2) context c any(TONEl) + any(BVK) > index(BV,2) context c any(BD) + any(BVK) > index(BV,2) context c this is legal?! c any(BDl) + any(BVK) > index(BVl,2) context c this is legal?! c any(TONE) + any(AVK) > index(AV,2) index(TONEu,1) c any(TONEl) + any(AVK) > index(AVl,2) index(TONEul,1) c any(Ctall) any(BD) + any(AVK) > index(Ctall,1) index(AVl,3) index(BD,2) c any(BD) + any(AVK) > index(AV,2) context c any(BDl) + any(AVK) > index(AV,2) context c Now to disallow diacritic clashes c note that these will sort in front of the no context rules, by context c length c these are the disabling vowel after tone rules. Must be commented out if c tone vowel reordering enabled. any(TONE) + any(BVK) > beep any(TONEl) + any(BVK) > beep any(BD) + any(BVK) > beep any(BDl) + any(BVK) > beep any(TONE) + any(AVK) > beep any(TONEl) + any(AVK) > beep any(BD) + any(AVK) > beep any(BDl) + any(AVK) > beep c acceptable rules to stop Vowel Tone Vowel type tricks c no need to comment out any(TONEu) + any(BVK) > beep any(TONEul) + any(BVK) > beep any(TONEu) + any(AVK) > beep any(TONEul) + any(AVK) > beep c only needed if tone vowel reordering enabled c any(BV) any(TONE) + any(BVK) > beep c any(BV) any(TONEl) + any(BVK) > beep c any(BVl) any(TONE) + any(BVK) > beep c any(BV) any(TONE) + any(AVK) > beep c any(BV) any(TONEl) + any(AVK) > beep c people may want to disable this c (reordering may be needed) c any(BVl) any(TONE) + any(AVK) > beep c ditto (reordering may be needed) c any(BV) any(BD) + any(AVK) > beep c ditto (no reordering) c any(BVl) any(BDl) + any(AVK) > beep c ditto (no reordering) c any(BV) any(BD) + any(BVK) > beep c any(BVl) any(BDl) + any(BVK) > beep any(TONE) + any(TONEK) > beep any(TONEl) + any(TONEK) > beep any(TONEu) + any(TONEK) > beep any(TONEul) + any(TONEK) > beep any(BD) + any(TONEK) > beep c people may want to disable this any(BDl) + any(TONEK) > beep c ditto any(TONE) + any(BDK) > beep c ditto any(TONEl) + any(BDK) > beep c ditto any(TONEu) + any(BDK) > beep c ditto any(TONEul) + any(BDK) > beep c ditto any(BD) + any(BDK) > beep any(BDl) + any(BDK) > beep any(AV) + any(AVK) > beep any(AVl) + any(AVK) > beep any(AV) + any(BVK) > beep c people may want to disable this (may c need reordering) any(AVl) + any(BVK) > beep c ditto (may need reordering) any(BV) + any(AVK) > beep c ditto (no reordering needed) any(BVl) + any(AVK) > beep c ditto (no reordering needed) any(BV) + any(BVK) > beep any(BVl) + any(BVK) > beep c Symbols '`' + 'p' > d144 c y-phuuying without subscript tail '`' + 't' > d128 c th-than without subscript tail '`' + '`' > d145 c open single quote '`' + '"' > d147 c open double quote '.' + '"' > d148 c close double quote '.' + "'" > d146 c close single quote d148 + '"' > d133 c ellipses '~' + '3' > '' c d238 epsilon symbol '~' + '"' > '' c d239 fish-eye symbol '~' + 'P' > '' c d250 ending symbol #1 '~' + '~' > '' c d251 ending symbol #2 '~' + '@' > '' c d149 large solid dot at mid-line '-' + '3' > '' c d150 en-dash d150 + '3' > '' c d151 em-dash