| 1 |
|
|---|
| 2 |
|
|---|
| 3 |
|
|---|
| 4 |
|
|---|
| 5 |
|
|---|
| 6 |
|
|---|
| 7 |
|
|---|
| 8 |
|
|---|
| 9 |
|
|---|
| 10 |
|
|---|
| 11 |
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 |
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 |
|
|---|
| 18 |
|
|---|
| 19 |
|
|---|
| 20 |
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 |
|
|---|
| 24 |
|
|---|
| 25 |
|
|---|
| 26 |
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 |
|
|---|
| 31 |
(require 'quail) |
|---|
| 32 |
(require 'lao-util) |
|---|
| 33 |
|
|---|
| 34 |
(defun quail-lao-update-translation (control-flag) |
|---|
| 35 |
(if (integerp control-flag) |
|---|
| 36 |
|
|---|
| 37 |
(setq quail-current-str |
|---|
| 38 |
(buffer-substring (overlay-start quail-overlay) |
|---|
| 39 |
(overlay-end quail-overlay)) |
|---|
| 40 |
unread-command-events |
|---|
| 41 |
(string-to-list |
|---|
| 42 |
(substring quail-current-key control-flag))) |
|---|
| 43 |
(setq quail-current-str |
|---|
| 44 |
(compose-string (quail-lookup-map-and-concat quail-current-key)))) |
|---|
| 45 |
control-flag) |
|---|
| 46 |
|
|---|
| 47 |
(defvar lao-key-alist |
|---|
| 48 |
'(("!" . "1") |
|---|
| 49 |
("\"" . "=") |
|---|
| 50 |
("#" . "3") |
|---|
| 51 |
("$" . "4") |
|---|
| 52 |
("&" . "5") |
|---|
| 53 |
("%" . "(1l(B") |
|---|
| 54 |
("'" . "(1'(B") |
|---|
| 55 |
("(" . "7") |
|---|
| 56 |
(")" . "8") |
|---|
| 57 |
("*" . "6") |
|---|
| 58 |
("+" . ["(1mh(B"]) |
|---|
| 59 |
("," . "(1A(B") |
|---|
| 60 |
("-" . "(1*(B") |
|---|
| 61 |
("." . "(1c(B") |
|---|
| 62 |
("/" . "(1=(B") |
|---|
| 63 |
("0" . "(1"(B") |
|---|
| 64 |
("1" . "(1B(B") |
|---|
| 65 |
("2" . "(1?(B") |
|---|
| 66 |
("3" . "(1b(B") |
|---|
| 67 |
("4" . "(16(B") |
|---|
| 68 |
("5" . "(1X(B") |
|---|
| 69 |
("6" . "(1Y(B") |
|---|
| 70 |
("7" . "(1$(B") |
|---|
| 71 |
("8" . "(15(B") |
|---|
| 72 |
("9" . "(1((B") |
|---|
| 73 |
(":" . "%") |
|---|
| 74 |
(" |
|---|
| 75 |
("<" . "(1}(B") |
|---|
| 76 |
("=" . "(1m(B") |
|---|
| 77 |
(">" . "$") |
|---|
| 78 |
("?" . ")") |
|---|
| 79 |
("@" . "2") |
|---|
| 80 |
("A" . ["(1Qi(B"]) |
|---|
| 81 |
("B" . ["(1Vi(B"]) |
|---|
| 82 |
("C" . "(1O(B") |
|---|
| 83 |
("D" . ".") |
|---|
| 84 |
("E" . ["(1Si(B"]) |
|---|
| 85 |
("F" . ",") |
|---|
| 86 |
("G" . ":") |
|---|
| 87 |
("H" . "(1j(B") |
|---|
| 88 |
("I" . "(1N(B") |
|---|
| 89 |
("J" . "(1k(B") |
|---|
| 90 |
("K" . "!") |
|---|
| 91 |
("L" . "?") |
|---|
| 92 |
("M" . "(1f(B") |
|---|
| 93 |
("N" . ["(1Wi(B"]) |
|---|
| 94 |
("O" . "(1|(B") |
|---|
| 95 |
("P" . "(1](B") |
|---|
| 96 |
("Q" . ["(1[i(B"]) |
|---|
| 97 |
("R" . "_") |
|---|
| 98 |
("S" . ";") |
|---|
| 99 |
("T" . "+") |
|---|
| 100 |
("U" . ["(1Ui(B"]) |
|---|
| 101 |
("V" . "x") |
|---|
| 102 |
("W" . "0") |
|---|
| 103 |
("X" . "(") |
|---|
| 104 |
("Y" . ["(1Ti(B"]) |
|---|
| 105 |
("Z" . "\"") |
|---|
| 106 |
("[" . "(1:(B") |
|---|
| 107 |
("]" . "(1E(B") |
|---|
| 108 |
("^" . "(1\(B") |
|---|
| 109 |
("_" . "9") |
|---|
| 110 |
("`" . "(1'(B") |
|---|
| 111 |
("a" . "(1Q(B") |
|---|
| 112 |
("b" . "(1V(B") |
|---|
| 113 |
("c" . "(1a(B") |
|---|
| 114 |
("d" . "(1!(B") |
|---|
| 115 |
("e" . "(1S(B") |
|---|
| 116 |
("f" . "(14(B") |
|---|
| 117 |
("g" . "(1`(B") |
|---|
| 118 |
("h" . "(1i(B") |
|---|
| 119 |
("i" . "(1C(B") |
|---|
| 120 |
("j" . "(1h(B") |
|---|
| 121 |
("k" . "(1R(B") |
|---|
| 122 |
("l" . "(1J(B") |
|---|
| 123 |
("m" . "(17(B") |
|---|
| 124 |
("n" . "(1W(B") |
|---|
| 125 |
("o" . "(19(B") |
|---|
| 126 |
("p" . "(1-(B") |
|---|
| 127 |
("q" . "(1[(B") |
|---|
| 128 |
("r" . "(1>(B") |
|---|
| 129 |
("s" . "(1K(B") |
|---|
| 130 |
("t" . "(1P(B") |
|---|
| 131 |
("u" . "(1U(B") |
|---|
| 132 |
("v" . "(1M(B") |
|---|
| 133 |
("w" . "(1d(B") |
|---|
| 134 |
("x" . "(1;(B") |
|---|
| 135 |
("y" . "(1T(B") |
|---|
| 136 |
("z" . "(1<(B") |
|---|
| 137 |
("{" . "-") |
|---|
| 138 |
("|" . ["(1K\(B"]) |
|---|
| 139 |
("}" . "/") |
|---|
| 140 |
("~" . "(1l(B") |
|---|
| 141 |
("\\0" . "(1p(B") |
|---|
| 142 |
("\\1" . "(1q(B") |
|---|
| 143 |
("\\2" . "(1r(B") |
|---|
| 144 |
("\\3" . "(1s(B") |
|---|
| 145 |
("\\4" . "(1t(B") |
|---|
| 146 |
("\\5" . "(1u(B") |
|---|
| 147 |
("\\6" . "(1v(B") |
|---|
| 148 |
("\\7" . "(1w(B") |
|---|
| 149 |
("\\8" . "(1x(B") |
|---|
| 150 |
("\\9" . "(1y(B") |
|---|
| 151 |
) |
|---|
| 152 |
"Alist of key sequences vs the corresponding Lao string to input. |
|---|
| 153 |
This variable is for the input method \"lao\". |
|---|
| 154 |
If you change the value of this variable while quail/lao is already loaded, |
|---|
| 155 |
you need to re-load it to properly re-initialize related alists.") |
|---|
| 156 |
|
|---|
| 157 |
|
|---|
| 158 |
(defconst lao-key-alist-vector |
|---|
| 159 |
(let ((tail lao-key-alist) |
|---|
| 160 |
consonant-key-alist semivowel-key-alist vowel-key-alist |
|---|
| 161 |
voweltone-key-alist tone-key-alist other-key-alist |
|---|
| 162 |
elt phonetic-type) |
|---|
| 163 |
(while tail |
|---|
| 164 |
(setq elt (car tail) tail (cdr tail)) |
|---|
| 165 |
(if (stringp (cdr elt)) |
|---|
| 166 |
(setq phonetic-type (get-char-code-property (aref (cdr elt) 0) |
|---|
| 167 |
'phonetic-type)) |
|---|
| 168 |
(setq phonetic-type (get-char-code-property (aref (aref (cdr elt) 0) 0) |
|---|
| 169 |
'phonetic-type)) |
|---|
| 170 |
(aset (cdr elt) 0 (compose-string (aref (cdr elt) 0)))) |
|---|
| 171 |
(cond ((eq phonetic-type 'consonant) |
|---|
| 172 |
(setq consonant-key-alist (cons elt consonant-key-alist))) |
|---|
| 173 |
((memq phonetic-type '(vowel-upper vowel-lower)) |
|---|
| 174 |
(if (stringp (cdr elt)) |
|---|
| 175 |
(setq vowel-key-alist (cons elt vowel-key-alist)) |
|---|
| 176 |
(setq voweltone-key-alist (cons elt voweltone-key-alist)))) |
|---|
| 177 |
((eq phonetic-type 'tone) |
|---|
| 178 |
(setq tone-key-alist (cons elt tone-key-alist))) |
|---|
| 179 |
((eq phonetic-type 'semivowel-lower) |
|---|
| 180 |
(setq semivowel-key-alist (cons elt semivowel-key-alist))) |
|---|
| 181 |
(t |
|---|
| 182 |
(setq other-key-alist (cons elt other-key-alist))))) |
|---|
| 183 |
(vector consonant-key-alist semivowel-key-alist vowel-key-alist |
|---|
| 184 |
voweltone-key-alist tone-key-alist other-key-alist))) |
|---|
| 185 |
|
|---|
| 186 |
(defconst lao-consonant-key-alist (aref lao-key-alist-vector 0)) |
|---|
| 187 |
(defconst lao-semivowel-key-alist (aref lao-key-alist-vector 1)) |
|---|
| 188 |
(defconst lao-vowel-key-alist (aref lao-key-alist-vector 2)) |
|---|
| 189 |
(defconst lao-voweltone-key-alist (aref lao-key-alist-vector 3)) |
|---|
| 190 |
(defconst lao-tone-key-alist (aref lao-key-alist-vector 4)) |
|---|
| 191 |
(defconst lao-other-key-alist (aref lao-key-alist-vector 5)) |
|---|
| 192 |
|
|---|
| 193 |
|
|---|
| 194 |
(makunbound 'lao-key-alist-vector) |
|---|
| 195 |
|
|---|
| 196 |
(quail-define-package |
|---|
| 197 |
"lao" "Lao" "(1E(B" t |
|---|
| 198 |
"Lao input method simulating Lao keyboard layout based on Thai TIS620" |
|---|
| 199 |
nil t t t t nil nil nil 'quail-lao-update-translation nil t) |
|---|
| 200 |
|
|---|
| 201 |
(quail-install-map |
|---|
| 202 |
(quail-map-from-table |
|---|
| 203 |
'((base-state (lao-consonant-key-alist . svt-state) |
|---|
| 204 |
lao-vowel-key-alist |
|---|
| 205 |
lao-voweltone-key-alist |
|---|
| 206 |
lao-tone-key-alist |
|---|
| 207 |
lao-other-key-alist) |
|---|
| 208 |
(svt-state (lao-semivowel-key-alist . v-state) |
|---|
| 209 |
(lao-vowel-key-alist . t-state) |
|---|
| 210 |
lao-voweltone-key-alist) |
|---|
| 211 |
(v-state (lao-vowel-key-alist . t-state)) |
|---|
| 212 |
(t-state lao-tone-key-alist)))) |
|---|
| 213 |
|
|---|
| 214 |
|
|---|
| 215 |
|
|---|
| 216 |
|
|---|