1;;; lao.el --- Quail package for inputting Lao characters -*-coding: iso-2022-7bit;-*- 2 3;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 4;; 2006, 2007 5;; National Institute of Advanced Industrial Science and Technology (AIST) 6;; Registration Number H14PRO021 7 8;; Keywords: multilingual, input method, Lao 9 10;; This file is part of GNU Emacs. 11 12;; GNU Emacs is free software; you can redistribute it and/or modify 13;; it under the terms of the GNU General Public License as published by 14;; the Free Software Foundation; either version 2, or (at your option) 15;; any later version. 16 17;; GNU Emacs is distributed in the hope that it will be useful, 18;; but WITHOUT ANY WARRANTY; without even the implied warranty of 19;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 20;; GNU General Public License for more details. 21 22;; You should have received a copy of the GNU General Public License 23;; along with GNU Emacs; see the file COPYING. If not, write to the 24;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 25;; Boston, MA 02110-1301, USA. 26 27;;; Commentary: 28 29;;; Code: 30 31(require 'quail) 32(require 'lao-util) 33 34(defun quail-lao-update-translation (control-flag) 35 (if (integerp control-flag) 36 ;; Non-composable character typed. 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 (";" . "(1G(B") 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. 153This variable is for the input method \"lao\". 154If you change the value of this variable while quail/lao is already loaded, 155you need to re-load it to properly re-initialize related alists.") 156 157;; Temporary variable to initialize lao-consonant-key-alist, etc. 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;; Done with it. 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;;; arch-tag: 23863a30-a8bf-402c-b7ce-c517a7aa8570 215;;; lao.el ends here 216