Mercurial > emacs
comparison leim/quail/indian.el @ 41464:93957ea66b86
Renamed from devanagari.el, and completely re-written.
The input method devanagari-hindi-transliteration is merged with
devanagari-itrans, devanagari-keyboard-a is renamed to
devanagari-inscript, devanagari-transliteration is renamed to
devanagari-kyoto-harvard.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Sun, 25 Nov 2001 02:31:25 +0000 |
parents | |
children | 69c2ba4ebc59 |
comparison
equal
deleted
inserted
replaced
41463:078a3890c752 | 41464:93957ea66b86 |
---|---|
1 ;; quail/indian.el -- Quail packages for inputting Indian | |
2 | |
3 ;; Copyright (C) 2000, 2001 Free Software Foundation, Inc. | |
4 | |
5 ;; Author: KAWABATA, Taichi <kawabata@m17n.org> | |
6 | |
7 ;; Keywords: multilingual, input method, Indian, Devanagari | |
8 | |
9 ;; This file is part of GNU Emacs. | |
10 | |
11 ;; GNU Emacs is free software; you can redistribute it and/or modify | |
12 ;; it under the terms of the GNU General Public License as published by | |
13 ;; the Free Software Foundation; either version 2, or (at your option) | |
14 ;; any later version. | |
15 | |
16 ;; GNU Emacs is distributed in the hope that it will be useful, | |
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 ;; GNU General Public License for more details. | |
20 | |
21 ;; You should have received a copy of the GNU General Public License | |
22 ;; along with GNU Emacs; see the file COPYING. If not, write to the | |
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
24 ;; Boston, MA 02111-1307, USA. | |
25 | |
26 ;;; Commentary: | |
27 | |
28 ;; History: | |
29 | |
30 ;; 2000.12.12 | |
31 ;; Totally re-written from devanagari.el to handle multiple Inidan Scripts. | |
32 | |
33 ;;; Code: | |
34 | |
35 (require 'cl) | |
36 (require 'quail) | |
37 (require 'devan-util) | |
38 (require 'ind-util) | |
39 | |
40 (defun quail-indian-preceding-char-position (position) | |
41 "Return the position of preceding composite character." | |
42 (let (prec-composed) | |
43 (if (char-valid-p (char-before position)) ;; range o.k. | |
44 (if (setq prec-composed (find-composition (1- position))) | |
45 (car prec-composed) | |
46 (1- position)) | |
47 nil))) | |
48 | |
49 (defvar quail-indian-update-preceding-char nil) | |
50 (make-variable-frame-local 'quail-indian-update-preceding-char) | |
51 | |
52 ;;; update function | |
53 | |
54 ;; CONTROL-FLAG is integer (n) | |
55 ;; quail-current-key :: keyboard input. | |
56 ;; Only first n can be translated. | |
57 ;; quail-current-string :: corresonding string. Translated when last | |
58 ;; time CONTROL-FLAG is nil. | |
59 ;; todo :: (1) put last (len-n) char to unrread-command-event. | |
60 ;; (2) put translated string to quail-current-string. | |
61 ;; | |
62 ;; CONTROL-FLAG is t (terminate) or nil (proceed the translation) | |
63 ;; quail-current-key :: keyboard input. | |
64 ;; quail-current-string :: corresponding string. Created by database. | |
65 ;; todo :: (1) put modified translated string to quail-current-string. | |
66 | |
67 (defun quail-indian-update-translation (control-flag) | |
68 ;;(message "input control-flag=%s, string=%s, key=%s" | |
69 ;; control-flag quail-current-str quail-current-key) | |
70 ;; make quail-current-str string when possible. | |
71 (if (char-valid-p quail-current-str) | |
72 (setq quail-current-str (char-to-string quail-current-str))) | |
73 ;; reset quail-indian-update-preceding-char if it's initial. | |
74 (if (= (overlay-start quail-overlay) (overlay-end quail-overlay)) | |
75 (setq quail-indian-update-preceding-char nil)) | |
76 ;; set quial-indian-update-preceding-char if appropriate. | |
77 (let* (prec-char-position composition-regexp | |
78 prec-char-str candidate-str match-pos match-end) | |
79 (when (and quail-current-str | |
80 (null input-method-use-echo-area) | |
81 (null input-method-exit-on-first-char) | |
82 (setq prec-char-position | |
83 (quail-indian-preceding-char-position | |
84 (overlay-start quail-overlay))) | |
85 (setq composition-regexp | |
86 (if prec-char-position | |
87 (caar (elt composition-function-table | |
88 (char-after prec-char-position))))) | |
89 ;; (null quail-indian-update-preceding-char) | |
90 (setq prec-char-str | |
91 (buffer-substring prec-char-position | |
92 (overlay-start quail-overlay)) | |
93 candidate-str (concat prec-char-str quail-current-str) | |
94 match-pos (string-match composition-regexp candidate-str) | |
95 match-end (match-end 0)) | |
96 (> match-end (length prec-char-str))) | |
97 (setq quail-indian-update-preceding-char prec-char-str) | |
98 (delete-region prec-char-position | |
99 (overlay-start quail-overlay)))) | |
100 ;; make quail-current-str string when possible. | |
101 (if (null quail-current-str) | |
102 (setq quail-current-str "")) | |
103 ;; set quail-current-str unless control-flag is number. | |
104 (if (numberp control-flag) | |
105 (setq quail-indian-update-preceding-char nil | |
106 quail-current-str | |
107 (if (equal quail-current-str "") | |
108 (substring quail-current-key 0 control-flag) | |
109 (indian-compose-string quail-current-str)) | |
110 unread-command-events | |
111 (string-to-list | |
112 (substring quail-current-key control-flag))) | |
113 (if quail-indian-update-preceding-char | |
114 (setq quail-current-str | |
115 (concat quail-indian-update-preceding-char | |
116 quail-current-str))) | |
117 (setq quail-current-str | |
118 (indian-compose-string quail-current-str))) | |
119 (when (eq t control-flag) | |
120 ;; reset preceding-char if translation is terminated. | |
121 (setq quail-indian-update-preceding-char nil)) | |
122 ;; compose to previous char if it looks possible. | |
123 ;;(message " out control-flag=%s, string=%s, key=%s" | |
124 ;; control-flag quail-current-str quail-current-key) | |
125 control-flag) | |
126 | |
127 ;;; | |
128 ;;; Input by transliteration | |
129 ;;; | |
130 | |
131 (defun quail-define-indian-trans-package (hashtbls pkgname | |
132 lang title doc) | |
133 (funcall 'quail-define-package pkgname lang title t doc | |
134 nil nil nil nil nil nil t nil | |
135 'quail-indian-update-translation) | |
136 (maphash | |
137 '(lambda (key val) | |
138 (quail-defrule key (if (= (length val) 1) | |
139 (string-to-char val) | |
140 (vector val)))) | |
141 (cdr hashtbls))) | |
142 | |
143 ;; | |
144 | |
145 ;; (quail-define-package "devanagari-itrans" "Devanagari" "DevIT" t "Devanagari ITRANS") | |
146 (quail-define-indian-trans-package | |
147 indian-dev-itrans-v5-hash "devanagari-itrans" "Devanagari" "DevIT" | |
148 "Devanagari transliteration by ITRANS method.") | |
149 | |
150 ;; (quail-define-package "devanagari-kyoto-harvard" "Devanagari" "DevKH" t "Devanagari Kyoto-Harvard") | |
151 (quail-define-indian-trans-package | |
152 indian-dev-kyoto-harvard-hash | |
153 "devanagari-kyoto-harvard" "Devanagari" "DevKH" | |
154 "Devanagari transliteration by Kyoto-Harvard method.") | |
155 | |
156 ;; (quail-define-package "devanagari-aiba" "Devanagari" "DevAB" t "Devanagari Aiba") | |
157 (quail-define-indian-trans-package | |
158 indian-dev-aiba-hash "devanagari-aiba" "Devanagari" "DevAB" | |
159 "Devanagari transliteration by Aiba-method.") | |
160 | |
161 ;;; | |
162 ;;; Input by Inscript | |
163 ;;; | |
164 | |
165 (defun flatten-list (lst) | |
166 "Flatten the nested LIST so that there would be no innner list." | |
167 (if (listp lst) | |
168 (apply 'append (mapcar 'flatten-list lst)) | |
169 (list lst))) | |
170 | |
171 (defun quail-define-inscript-package (char-table key-table pkgname lang title | |
172 docstring) | |
173 (setq char-table (flatten-list char-table)) | |
174 (setq key-table (flatten-list key-table)) | |
175 (funcall 'quail-define-package pkgname lang title nil docstring | |
176 nil nil nil nil nil nil nil nil | |
177 'quail-indian-update-translation | |
178 ) | |
179 (mapcar* | |
180 '(lambda (key val) | |
181 (and key val | |
182 (quail-defrule | |
183 (if (char-valid-p key) (char-to-string key) key) | |
184 (if (stringp val) (vector val) val)))) | |
185 key-table char-table)) | |
186 | |
187 ;; | |
188 | |
189 (defvar inscript-dev-keytable | |
190 '( | |
191 (;; VOWELS (18) | |
192 (?D nil) (?E ?e) (?F ?f) (?R ?r) (?G ?g) (?T ?t) | |
193 (?+ ?=) ("F]" "f]") (?! ?@) (?Z ?z) (?S ?s) (?W ?w) | |
194 (?| ?\\) (?~ ?`) (?A ?a) (?Q ?q) ("+]" "=]") ("R]" "r]")) | |
195 (;; CONSONANTS (42) | |
196 ?k ?K ?i ?I ?U ;; GRUTTALS | |
197 ?\; ?: ?p ?P ?} ;; PALATALS | |
198 ?' ?\" ?\[ ?{ ?C ;; CEREBRALS | |
199 ?l ?L ?o ?O ?v ?V ;; DENTALS | |
200 ?h ?H ?y ?Y ?c ;; LABIALS | |
201 ?/ ?j ?J ?n ?N "N]" ?b ;; SEMIVOWELS | |
202 ?M ?< ?m ?u ;; SIBILANTS | |
203 "k]" "K]" "i]" "p]" "[]" "{]" "H]" "/]" ;; NUKTAS | |
204 ?% ?&) | |
205 (;; Misc Symbols (7) | |
206 ?X ?x ?_ ">]" ?d "X]" ?>) | |
207 (;; Digits | |
208 ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8 ?9) | |
209 (;; Inscripts | |
210 ?# ?$ ?^ ?* ?\]))) | |
211 | |
212 ;; (quail-define-package "devanagari-inscript" "Devanagari" "DevIS" t "Devanagari keyboard Inscript") | |
213 (quail-define-inscript-package | |
214 indian-dev-base-table inscript-dev-keytable | |
215 "devanagari-inscript" "Devanagari" "DevIS" | |
216 "Devanagari keyboard Inscript.") | |
217 | |
218 ;; quail/indian.el ends here. |