Commit | Line | Data |
---|---|---|
985773c9 | 1 | ;;; ethio-util.el --- utilities for Ethiopic -*- coding: utf-8; -*- |
4ed46869 | 2 | |
95df8112 | 3 | ;; Copyright (C) 1997-1998, 2002-2011 Free Software Foundation, Inc. |
38141d20 | 4 | ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, |
5df4f04c | 5 | ;; 2006, 2007, 2008, 2009, 2010, 2011 |
eaa61218 KH |
6 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
7 | ;; Registration Number H14PRO021 | |
3a549e1c | 8 | ;; Copyright (C) 2005, 2006 |
9017ac97 | 9 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
3a549e1c | 10 | ;; Registration Number: H15PRO110 |
4ed46869 | 11 | |
60acfd15 | 12 | ;; Keywords: mule, multilingual, Ethiopic |
4ed46869 KH |
13 | |
14 | ;; This file is part of GNU Emacs. | |
15 | ||
4936186e | 16 | ;; GNU Emacs is free software: you can redistribute it and/or modify |
4ed46869 | 17 | ;; it under the terms of the GNU General Public License as published by |
4936186e GM |
18 | ;; the Free Software Foundation, either version 3 of the License, or |
19 | ;; (at your option) any later version. | |
4ed46869 KH |
20 | |
21 | ;; GNU Emacs is distributed in the hope that it will be useful, | |
22 | ;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
23 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
24 | ;; GNU General Public License for more details. | |
25 | ||
26 | ;; You should have received a copy of the GNU General Public License | |
4936186e | 27 | ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. |
60acfd15 | 28 | |
b8b2ea31 | 29 | ;; Author: TAKAHASHI Naoto <ntakahas@m17n.org> |
4ed46869 | 30 | |
e8af40ee PJ |
31 | ;;; Commentary: |
32 | ||
4ed46869 KH |
33 | ;;; Code: |
34 | ||
9017ac97 KH |
35 | (require 'robin) |
36 | ||
22e382fd KH |
37 | ;; Information for exiting Ethiopic environment. |
38 | (defvar exit-ethiopic-environment-data nil) | |
39 | ||
45717142 KH |
40 | ;;;###autoload |
41 | (defun setup-ethiopic-environment-internal () | |
22e382fd KH |
42 | (let ((key-bindings '((" " . ethio-insert-space) |
43 | ([?\S- ] . ethio-insert-ethio-space) | |
9017ac97 | 44 | ;; ([?\C-'] . ethio-gemination) |
b8b2ea31 KH |
45 | ([f3] . ethio-fidel-to-sera-buffer) |
46 | ([S-f3] . ethio-fidel-to-sera-region) | |
9017ac97 | 47 | ([C-f3] . ethio-fidel-to-sera-marker) |
22e382fd KH |
48 | ([f4] . ethio-sera-to-fidel-buffer) |
49 | ([S-f4] . ethio-sera-to-fidel-region) | |
9017ac97 | 50 | ([C-f4] . ethio-sera-to-fidel-marker) |
b8b2ea31 KH |
51 | ([S-f5] . ethio-toggle-punctuation) |
52 | ([S-f6] . ethio-modify-vowel) | |
53 | ([S-f7] . ethio-replace-space) | |
9017ac97 | 54 | ;; ([S-f8] . ethio-input-special-character) ; deprecated |
b8b2ea31 KH |
55 | ([C-f9] . ethio-toggle-space) |
56 | ([S-f9] . ethio-replace-space) ; as requested | |
57 | )) | |
22e382fd KH |
58 | kb) |
59 | (while key-bindings | |
60 | (setq kb (car (car key-bindings))) | |
61 | (setq exit-ethiopic-environment-data | |
62 | (cons (cons kb (global-key-binding kb)) | |
63 | exit-ethiopic-environment-data)) | |
64 | (global-set-key kb (cdr (car key-bindings))) | |
65 | (setq key-bindings (cdr key-bindings)))) | |
66 | ||
06772363 SM |
67 | (add-hook 'find-file-hook 'ethio-find-file) |
68 | (add-hook 'write-file-functions 'ethio-write-file) | |
22e382fd KH |
69 | (add-hook 'after-save-hook 'ethio-find-file)) |
70 | ||
71 | (defun exit-ethiopic-environment () | |
c256b4ab | 72 | "Exit Ethiopic language environment." |
22e382fd KH |
73 | (while exit-ethiopic-environment-data |
74 | (global-set-key (car (car exit-ethiopic-environment-data)) | |
75 | (cdr (car exit-ethiopic-environment-data))) | |
76 | (setq exit-ethiopic-environment-data | |
77 | (cdr exit-ethiopic-environment-data))) | |
78 | ||
06772363 SM |
79 | (remove-hook 'find-file-hook 'ethio-find-file) |
80 | (remove-hook 'write-file-functions 'ethio-write-file) | |
22e382fd | 81 | (remove-hook 'after-save-hook 'ethio-find-file)) |
335a7ad7 | 82 | |
4ed46869 KH |
83 | ;; |
84 | ;; ETHIOPIC UTILITY FUNCTIONS | |
85 | ;; | |
86 | ||
60acfd15 KH |
87 | ;; If the filename ends in ".sera", editing is done in fidel |
88 | ;; but file I/O is done in SERA. | |
89 | ;; | |
90 | ;; If the filename ends in ".java", editing is done in fidel | |
a1506d29 | 91 | ;; but file I/O is done in the \uXXXX style, where XXXX is |
60acfd15 KH |
92 | ;; the Unicode codepoint for the Ethiopic character. |
93 | ;; | |
94 | ;; If the filename ends in ".tex", editing is done in fidel | |
95 | ;; but file I/O is done in EthioTeX format. | |
60acfd15 | 96 | |
4ed46869 | 97 | ;; |
60acfd15 KH |
98 | ;; users' preference |
99 | ;; | |
100 | ||
101 | (defvar ethio-primary-language 'tigrigna | |
102 | "*Symbol that defines the primary language in SERA --> FIDEL conversion. | |
103 | The value should be one of: `tigrigna', `amharic' or `english'.") | |
104 | ||
105 | (defvar ethio-secondary-language 'english | |
106 | "*Symbol that defines the secondary language in SERA --> FIDEL conversion. | |
107 | The value should be one of: `tigrigna', `amharic' or `english'.") | |
108 | ||
109 | (defvar ethio-use-colon-for-colon nil | |
110 | "*Non-nil means associate ASCII colon with Ethiopic colon. | |
111 | If nil, associate ASCII colon with Ethiopic word separator, i.e., two | |
112 | vertically stacked dots. All SERA <--> FIDEL converters refer this | |
113 | variable.") | |
114 | ||
115 | (defvar ethio-use-three-dot-question nil | |
116 | "*Non-nil means associate ASCII question mark with Ethiopic old style question mark (three vertically stacked dots). | |
63a4e775 | 117 | If nil, associate ASCII question mark with Ethiopic stylized question |
60acfd15 KH |
118 | mark. All SERA <--> FIDEL converters refer this variable.") |
119 | ||
120 | (defvar ethio-quote-vowel-always nil | |
121 | "*Non-nil means always put an apostrophe before an isolated vowel (except at word initial) in FIDEL --> SERA conversion. | |
9017ac97 | 122 | If nil, put an apostrophe only between a 6th-form consonant and an |
60acfd15 KH |
123 | isolated vowel.") |
124 | ||
125 | (defvar ethio-W-sixth-always nil | |
126 | "*Non-nil means convert the Wu-form of a 12-form consonant to \"W'\" instead of \"Wu\" in FIDEL --> SERA conversion.") | |
127 | ||
128 | (defvar ethio-numeric-reduction 0 | |
129 | "*Degree of reduction in converting Ethiopic digits into Arabic digits. | |
130 | Should be 0, 1 or 2. | |
131 | For example, ({10}{9}{100}{80}{7}) is converted into: | |
132 | `10`9`100`80`7 if `ethio-numeric-reduction' is 0, | |
133 | `109100807 if `ethio-numeric-reduction' is 1, | |
134 | `10900807 if `ethio-numeric-reduction' is 2.") | |
135 | ||
60acfd15 KH |
136 | (defvar ethio-java-save-lowercase nil |
137 | "*Non-nil means save Ethiopic characters in lowercase hex numbers to Java files. | |
138 | If nil, use uppercases.") | |
4ed46869 | 139 | |
9017ac97 KH |
140 | (defun ethio-prefer-amharic-p () |
141 | (or (eq ethio-primary-language 'amharic) | |
142 | (and (not (eq ethio-primary-language 'tigrigna)) | |
143 | (eq ethio-secondary-language 'amharic)))) | |
144 | ||
145 | (defun ethio-prefer-amharic (arg) | |
146 | (if arg | |
147 | (progn | |
148 | (robin-modify-package "ethiopic-sera" "'a" ?አ) | |
149 | (robin-modify-package "ethiopic-sera" "a" "አ") | |
150 | (robin-modify-package "ethiopic-sera" "'A" ?ኣ) | |
151 | (robin-modify-package "ethiopic-sera" "A" "ኣ")) | |
152 | (robin-modify-package "ethiopic-sera" "'A" ?አ) | |
153 | (robin-modify-package "ethiopic-sera" "A" "አ") | |
154 | (robin-modify-package "ethiopic-sera" "'a" ?ኣ) | |
155 | (robin-modify-package "ethiopic-sera" "a" "ኣ"))) | |
156 | ||
157 | (defun ethio-use-colon-for-colon (arg) | |
158 | (if arg | |
159 | (progn | |
160 | (robin-modify-package "ethiopic-sera" ":" ?፥) | |
161 | (robin-modify-package "ethiopic-sera" "`:" ?፡)) | |
162 | (robin-modify-package "ethiopic-sera" " : " ?፡) | |
163 | (robin-modify-package "ethiopic-sera" ":" "፡") | |
164 | (robin-modify-package "ethiopic-sera" "-:" ?፥))) | |
165 | ||
166 | (defun ethio-use-three-dot-question (arg) | |
167 | (if arg | |
168 | (progn | |
169 | (robin-modify-package "ethiopic-sera" "?" ?፧) | |
170 | (robin-modify-package "ethiopic-sera" "`?" ??)) | |
171 | (robin-modify-package "ethiopic-sera" "?" ??) | |
172 | (robin-modify-package "ethiopic-sera" "`?" ?፧))) | |
173 | ||
174 | (defun ethio-adjust-robin () | |
175 | (ethio-prefer-amharic (ethio-prefer-amharic-p)) | |
176 | (ethio-use-colon-for-colon ethio-use-colon-for-colon) | |
177 | (ethio-use-three-dot-question ethio-use-three-dot-question)) | |
178 | ||
179 | (add-hook 'robin-activate-hook 'ethio-adjust-robin) | |
180 | ||
4ed46869 KH |
181 | ;; |
182 | ;; SERA to FIDEL | |
183 | ;; | |
a1506d29 | 184 | |
4ed46869 | 185 | ;;;###autoload |
9017ac97 KH |
186 | (defun ethio-sera-to-fidel-buffer (&optional secondary force) |
187 | "Convert the current buffer from SERA to FIDEL. | |
60acfd15 | 188 | |
9017ac97 KH |
189 | The variable `ethio-primary-language' specifies the primary |
190 | language and `ethio-secondary-language' specifies the secondary. | |
191 | ||
192 | If the 1st optional argument SECONDARY is non-nil, assume the | |
193 | buffer begins with the secondary language; otherwise with the | |
194 | primary language. | |
4ed46869 | 195 | |
9017ac97 | 196 | If the 2nd optional argument FORCE is non-nil, perform conversion |
60acfd15 | 197 | even if the buffer is read-only. |
4ed46869 | 198 | |
60acfd15 | 199 | See also the descriptions of the variables |
9017ac97 | 200 | `ethio-use-colon-for-colon' and `ethio-use-three-dot-question'." |
4ed46869 | 201 | |
9017ac97 KH |
202 | (interactive "P") |
203 | (ethio-sera-to-fidel-region (point-min) (point-max) secondary force)) | |
204 | ||
205 | ;; To avoid byte-compiler warnings. It should never be set globally. | |
206 | (defvar ethio-sera-being-called-by-w3) | |
207 | ;; This variable will be bound by some third-party package. | |
208 | (defvar sera-being-called-by-w3) | |
4ed46869 KH |
209 | |
210 | ;;;###autoload | |
9017ac97 KH |
211 | (defun ethio-sera-to-fidel-region (begin end &optional secondary force) |
212 | "Convert the characters in region from SERA to FIDEL. | |
60acfd15 KH |
213 | |
214 | The variable `ethio-primary-language' specifies the primary | |
215 | language and `ethio-secondary-language' specifies the secondary. | |
4ed46869 | 216 | |
9017ac97 KH |
217 | If the 3rd argument SECONDARY is given and non-nil, assume the |
218 | region begins with the secondary language; otherwise with the | |
219 | primary language. | |
4ed46869 | 220 | |
9017ac97 KH |
221 | If the 4th argument FORCE is given and non-nil, perform |
222 | conversion even if the buffer is read-only. | |
60acfd15 KH |
223 | |
224 | See also the descriptions of the variables | |
9017ac97 | 225 | `ethio-use-colon-for-colon' and `ethio-use-three-dot-question'." |
60acfd15 | 226 | |
9017ac97 | 227 | (interactive "r\nP") |
4ed46869 KH |
228 | (if (and buffer-read-only |
229 | (not force) | |
230 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) | |
231 | (error "")) | |
60acfd15 KH |
232 | |
233 | (let ((ethio-primary-language ethio-primary-language) | |
234 | (ethio-secondary-language ethio-secondary-language) | |
9017ac97 KH |
235 | ;; The above two variables may be changed temporarily by tilde |
236 | ;; escapes during conversion. We bind them to the variables | |
237 | ;; of the same names so that the original values are restored | |
238 | ;; when this function exits. | |
60acfd15 | 239 | (buffer-read-only nil) |
9017ac97 KH |
240 | (lang (if secondary ethio-secondary-language ethio-primary-language)) |
241 | ret) | |
4ed46869 | 242 | |
9017ac97 KH |
243 | (ethio-use-colon-for-colon ethio-use-colon-for-colon) |
244 | (ethio-use-three-dot-question ethio-use-three-dot-question) | |
4ed46869 | 245 | |
9017ac97 KH |
246 | (save-restriction |
247 | (narrow-to-region begin end) | |
248 | (goto-char (point-min)) | |
249 | (while (not (eobp)) | |
250 | (setq ret | |
251 | (cond | |
252 | ((eq lang 'amharic) | |
253 | (ethio-prefer-amharic t) | |
254 | (ethio-sera-to-fidel-region-ethio 'amharic)) | |
255 | ((eq lang 'tigrigna) | |
256 | (ethio-prefer-amharic nil) | |
257 | (ethio-sera-to-fidel-region-ethio 'tigrigna)) | |
258 | (t | |
259 | (ethio-sera-to-fidel-region-noethio)))) | |
260 | (setq lang | |
261 | (if (eq ret 'toggle) | |
262 | (if (eq lang ethio-primary-language) | |
263 | ethio-secondary-language | |
264 | ethio-primary-language) | |
265 | ret))))) | |
266 | ||
267 | ;; Restore user's preference. | |
268 | (ethio-adjust-robin)) | |
269 | ||
270 | (defun ethio-sera-to-fidel-region-noethio () | |
271 | "Return next language as symbol: amharic, tigrigna, toggle or nil." | |
272 | (let (lflag) | |
273 | (cond | |
60acfd15 | 274 | |
9017ac97 KH |
275 | ;; No more "\", i.e. nothing to do. |
276 | ((not (search-forward "\\" nil 0)) | |
277 | nil) | |
60acfd15 | 278 | |
9017ac97 KH |
279 | ;; Hereafter point is put after a "\". |
280 | ;; First delete that "\", then check the following chars. | |
60acfd15 | 281 | |
9017ac97 KH |
282 | ;; A language flag. |
283 | ((progn (delete-char -1) (setq lflag (ethio-process-language-flag))) | |
284 | lflag) | |
60acfd15 | 285 | |
9017ac97 KH |
286 | ;; "\\" : leave the second "\" and continue in the same language. |
287 | ((= (following-char) ?\\) | |
288 | (forward-char 1) | |
289 | nil) | |
60acfd15 | 290 | |
9017ac97 KH |
291 | ;; "\ " : delete the following " " and toggle the language. |
292 | ((= (following-char) 32) | |
293 | (delete-char 1) | |
294 | 'toggle) | |
60acfd15 | 295 | |
9017ac97 KH |
296 | ;; A "\" but not a special sequence: simply toggle the language. |
297 | (t | |
298 | 'toggle)))) | |
60acfd15 | 299 | |
9017ac97 KH |
300 | (defun ethio-sera-to-fidel-region-ethio (lang) |
301 | "Return next language as symbol: amharic, tigrigna, toggle or nil." | |
302 | (save-restriction | |
303 | (narrow-to-region | |
304 | (point) | |
305 | (if (re-search-forward "\\(`[1-9][0-9]*\\)\\|[\\<&]" nil t) | |
306 | (match-beginning 0) | |
307 | (point-max))) | |
308 | (robin-convert-region (point-min) (point-max) "ethiopic-sera") | |
309 | (goto-char (point-max))) | |
310 | ||
311 | (let (lflag) | |
312 | (cond | |
313 | ((= (following-char) ?`) | |
314 | (delete-char 1) | |
315 | (ethio-process-digits) | |
316 | lang) | |
317 | ||
318 | ((looking-at "[<&]") | |
319 | (if (or (and (boundp 'ethio-sera-being-called-by-w3) | |
320 | ethio-sera-being-called-by-w3) | |
321 | (and (boundp 'sera-being-called-by-w3) | |
322 | sera-being-called-by-w3)) | |
323 | (search-forward (if (= (following-char) ?<) ">" ";") nil 0) | |
60acfd15 | 324 | (forward-char 1)) |
9017ac97 | 325 | lang) |
60acfd15 | 326 | |
9017ac97 KH |
327 | ((eobp) |
328 | nil) | |
60acfd15 | 329 | |
9017ac97 KH |
330 | ;; Now we must be looking at a "\". |
331 | ;; First delete that "\", then check the following chars. | |
60acfd15 | 332 | |
9017ac97 KH |
333 | ((progn (delete-char 1) (= (following-char) 32)) |
334 | (delete-char 1) | |
335 | 'toggle) | |
60acfd15 | 336 | |
9017ac97 KH |
337 | ((looking-at "[,.;:'`?\\]+") |
338 | (goto-char (match-end 0)) | |
339 | lang) | |
60acfd15 | 340 | |
9017ac97 KH |
341 | ((/= (following-char) ?~) |
342 | 'toggle) | |
60acfd15 | 343 | |
9017ac97 | 344 | ;; Now we must be looking at a "~". |
60acfd15 | 345 | |
9017ac97 KH |
346 | ((setq lflag (ethio-process-language-flag)) |
347 | lflag) | |
60acfd15 | 348 | |
9017ac97 | 349 | ;; Delete the following "~" and check the following chars. |
60acfd15 | 350 | |
9017ac97 KH |
351 | ((progn (delete-char 1) (looking-at "! ?")) |
352 | (replace-match "") | |
353 | (if (re-search-forward "\\\\~! ?" nil 0) | |
354 | (replace-match "")) | |
355 | lang) | |
60acfd15 | 356 | |
9017ac97 KH |
357 | ((looking-at "-: ?") |
358 | (replace-match "") | |
359 | (ethio-use-colon-for-colon t) | |
360 | lang) | |
60acfd15 | 361 | |
9017ac97 KH |
362 | ((looking-at "`: ?") |
363 | (replace-match "") | |
364 | (ethio-use-colon-for-colon nil) | |
365 | lang) | |
60acfd15 | 366 | |
9017ac97 KH |
367 | ((looking-at "`| ?") |
368 | (replace-match "") | |
369 | (ethio-use-three-dot-question t) | |
370 | lang) | |
60acfd15 | 371 | |
9017ac97 KH |
372 | ((looking-at "\\? ?") |
373 | (replace-match "") | |
374 | (ethio-use-three-dot-question nil) | |
375 | lang) | |
60acfd15 | 376 | |
9017ac97 KH |
377 | ;; Unknown tilde escape. Recover the deleted chars. |
378 | (t | |
379 | (insert "\\~") | |
380 | lang)))) | |
60acfd15 KH |
381 | |
382 | (defun ethio-process-language-flag nil | |
383 | "Process a language flag of the form \"~lang\" or \"~lang1~lang2\". | |
384 | ||
385 | If looking at \"~lang1~lang2\", set `ethio-primary-language' and | |
9017ac97 | 386 | `ethio-secondary-language' based on \"lang1\" and \"lang2\". |
60acfd15 KH |
387 | Then delete the language flag \"~lang1~lang2\" from the buffer. |
388 | Return value is the new primary language. | |
389 | ||
9017ac97 KH |
390 | If looking at \"~lang\", delete that language flag \"~lang\" from |
391 | the buffer and return that language. In this case | |
392 | `ethio-primary-language' and `ethio-secondary-language' are left | |
393 | unchanged. | |
60acfd15 KH |
394 | |
395 | If an unsupported language flag is found, just return nil without | |
396 | changing anything." | |
397 | ||
398 | (let (lang1 lang2) | |
399 | (cond | |
400 | ||
401 | ;; ~lang1~lang2 | |
402 | ((and (looking-at | |
403 | "~\\([a-z][a-z][a-z]?\\)~\\([a-z][a-z][a-z]?\\)[ \t\n\\]") | |
9017ac97 KH |
404 | (setq lang1 (ethio-flag-to-language (match-string 1))) |
405 | (setq lang2 (ethio-flag-to-language (match-string 2)))) | |
60acfd15 KH |
406 | (setq ethio-primary-language lang1 |
407 | ethio-secondary-language lang2) | |
408 | (delete-region (point) (match-end 2)) | |
409 | (if (= (following-char) 32) | |
410 | (delete-char 1)) | |
411 | ethio-primary-language) | |
412 | ||
413 | ;; ~lang | |
414 | ((and (looking-at "~\\([a-z][a-z][a-z]?\\)[ \t\n\\]") | |
9017ac97 | 415 | (setq lang1 (ethio-flag-to-language (match-string 1)))) |
60acfd15 KH |
416 | (delete-region (point) (match-end 1)) |
417 | (if (= (following-char) 32) | |
418 | (delete-char 1)) | |
419 | lang1) | |
420 | ||
421 | ;; otherwise | |
422 | (t | |
423 | nil)))) | |
424 | ||
60acfd15 KH |
425 | (defun ethio-flag-to-language (flag) |
426 | (cond | |
427 | ((or (string= flag "en") (string= flag "eng")) 'english) | |
428 | ((or (string= flag "ti") (string= flag "tir")) 'tigrigna) | |
429 | ((or (string= flag "am") (string= flag "amh")) 'amharic) | |
430 | (t nil))) | |
a1506d29 | 431 | |
9017ac97 | 432 | (defun ethio-process-digits nil |
4ed46869 KH |
433 | "Convert Arabic digits to Ethiopic digits." |
434 | (let (ch z) | |
435 | (while (and (>= (setq ch (following-char)) ?1) | |
436 | (<= ch ?9)) | |
437 | (delete-char 1) | |
438 | ||
439 | ;; count up following zeros | |
440 | (setq z 0) | |
441 | (while (= (following-char) ?0) | |
442 | (delete-char 1) | |
443 | (setq z (1+ z))) | |
444 | ||
445 | (cond | |
446 | ||
447 | ;; first digit is 10, 20, ..., or 90 | |
448 | ((= (mod z 2) 1) | |
9017ac97 | 449 | (insert (aref [?፲ ?፳ ?፴ ?፵ ?፶ ?፷ ?፸ ?፹ ?፺] (- ch ?1))) |
4ed46869 KH |
450 | (setq z (1- z))) |
451 | ||
452 | ;; first digit is 2, 3, ..., or 9 | |
453 | ((/= ch ?1) | |
9017ac97 | 454 | (insert (aref [?፪ ?፫ ?፬ ?፭ ?፮ ?፯ ?፰ ?፱] (- ch ?2)))) |
4ed46869 KH |
455 | |
456 | ;; single 1 | |
457 | ((= z 0) | |
9017ac97 | 458 | (insert "፩"))) |
4ed46869 KH |
459 | |
460 | ;; 100 | |
461 | (if (= (mod z 4) 2) | |
9017ac97 | 462 | (insert "፻")) |
4ed46869 KH |
463 | |
464 | ;; 10000 | |
9017ac97 | 465 | (insert-char ?፼ (/ z 4))))) |
4ed46869 KH |
466 | |
467 | ;;;###autoload | |
60acfd15 KH |
468 | (defun ethio-sera-to-fidel-marker (&optional force) |
469 | "Convert the regions surrounded by \"<sera>\" and \"</sera>\" from SERA to FIDEL. | |
470 | Assume that each region begins with `ethio-primary-language'. | |
471 | The markers \"<sera>\" and \"</sera>\" themselves are not deleted." | |
472 | (interactive "P") | |
4ed46869 | 473 | (if (and buffer-read-only |
60acfd15 | 474 | (not force) |
4ed46869 KH |
475 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) |
476 | (error "")) | |
477 | (save-excursion | |
478 | (goto-char (point-min)) | |
9017ac97 | 479 | (while (search-forward "<sera>" nil t) |
60acfd15 | 480 | (ethio-sera-to-fidel-region |
4ed46869 | 481 | (point) |
9017ac97 | 482 | (if (search-forward "</sera>" nil t) |
4ed46869 KH |
483 | (match-beginning 0) |
484 | (point-max)) | |
485 | nil | |
486 | 'force)))) | |
487 | ||
488 | ;; | |
489 | ;; FIDEL to SERA | |
490 | ;; | |
491 | ||
60acfd15 KH |
492 | (defun ethio-language-to-flag (lang) |
493 | (cond | |
494 | ((eq lang 'english) "eng") | |
495 | ((eq lang 'tigrigna) "tir") | |
496 | ((eq lang 'amharic) "amh") | |
497 | (t ""))) | |
4ed46869 KH |
498 | |
499 | ;;;###autoload | |
9017ac97 KH |
500 | (defun ethio-fidel-to-sera-buffer (&optional secondary force) |
501 | "Replace all the FIDEL characters in the current buffer to the SERA format. | |
60acfd15 KH |
502 | The variable `ethio-primary-language' specifies the primary |
503 | language and `ethio-secondary-language' specifies the secondary. | |
4ed46869 | 504 | |
9017ac97 KH |
505 | If the 1st optional argument SECONDARY is non-nil, try to convert the |
506 | region so that it begins with the secondary language; otherwise with the | |
507 | primary language. | |
4ed46869 | 508 | |
9017ac97 | 509 | If the 2nd optional argument FORCE is non-nil, convert even if the |
60acfd15 KH |
510 | buffer is read-only. |
511 | ||
512 | See also the descriptions of the variables | |
70e9e25e | 513 | `ethio-use-colon-for-colon', `ethio-use-three-dot-question', |
60acfd15 | 514 | `ethio-quote-vowel-always' and `ethio-numeric-reduction'." |
4ed46869 | 515 | |
9017ac97 KH |
516 | (interactive "P") |
517 | (ethio-fidel-to-sera-region (point-min) (point-max) secondary force)) | |
4ed46869 KH |
518 | |
519 | ;;;###autoload | |
9017ac97 KH |
520 | (defun ethio-fidel-to-sera-region (begin end &optional secondary force) |
521 | "Replace all the FIDEL characters in the region to the SERA format. | |
522 | ||
60acfd15 KH |
523 | The variable `ethio-primary-language' specifies the primary |
524 | language and `ethio-secondary-language' specifies the secondary. | |
4ed46869 | 525 | |
9017ac97 KH |
526 | If the 3rd argument SECONDARY is given and non-nil, convert |
527 | the region so that it begins with the secondary language; otherwise with | |
528 | the primary language. | |
4ed46869 | 529 | |
9017ac97 | 530 | If the 4th argument FORCE is given and non-nil, convert even if the |
4ed46869 KH |
531 | buffer is read-only. |
532 | ||
60acfd15 | 533 | See also the descriptions of the variables |
70e9e25e | 534 | `ethio-use-colon-for-colon', `ethio-use-three-dot-question', |
60acfd15 | 535 | `ethio-quote-vowel-always' and `ethio-numeric-reduction'." |
4ed46869 | 536 | |
9017ac97 | 537 | (interactive "r\nP") |
4ed46869 KH |
538 | (if (and buffer-read-only |
539 | (not force) | |
540 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) | |
541 | (error "")) | |
542 | ||
9017ac97 KH |
543 | (save-restriction |
544 | (narrow-to-region begin end) | |
4ed46869 | 545 | |
9017ac97 KH |
546 | (let ((buffer-read-only nil) |
547 | (mode (if secondary | |
548 | ethio-secondary-language | |
549 | ethio-primary-language)) | |
550 | (flag (if (ethio-prefer-amharic-p) "\\~amh " "\\~tir ")) | |
551 | p ch) | |
4ed46869 | 552 | |
9017ac97 KH |
553 | (goto-char (point-min)) |
554 | (ethio-adjust-robin) | |
555 | (unless (eq mode 'english) | |
556 | (setq mode 'ethiopic)) | |
557 | (if (and (eq mode 'english) (looking-at "\\ce")) | |
558 | (setq mode 'ethiopic)) | |
559 | (if (and (eq mode 'ethiopic) (looking-at "\\Ce")) | |
560 | (setq mode 'english)) | |
561 | (insert (if (eq mode 'english) "\\~eng " flag)) | |
562 | ||
563 | (while (not (eobp)) | |
564 | ||
565 | (if (eq mode 'english) | |
60acfd15 | 566 | (progn |
9017ac97 KH |
567 | (if (re-search-forward "\\(\\ce\\|\\\\\\)" nil 0) |
568 | (forward-char -1)) | |
569 | (cond | |
570 | ((eq (following-char) ?\\) | |
571 | (insert "\\") | |
572 | (forward-char 1)) | |
573 | ((looking-at "\\ce") | |
60acfd15 | 574 | (insert flag) |
9017ac97 | 575 | (setq mode 'ethiopic)))) |
4ed46869 | 576 | |
9017ac97 KH |
577 | ;; If we reach here, mode is ethiopic. |
578 | (setq p (point)) | |
579 | (if (re-search-forward "[a-z,.;:'`?\\<&]" nil 0) | |
580 | (forward-char -1)) | |
581 | (save-restriction | |
582 | (narrow-to-region p (point)) | |
583 | (robin-invert-region (point-min) (point-max) "ethiopic-sera") | |
4ed46869 | 584 | |
91af3942 | 585 | ;; ethio-quote-vowel-always |
9017ac97 KH |
586 | (goto-char (point-min)) |
587 | (while (re-search-forward "'[eauio]" nil t) | |
588 | (save-excursion | |
589 | (forward-char -2) | |
590 | (setq ch (preceding-char)) | |
591 | (if (or (and (>= ch ?a) (<= ch ?z)) | |
592 | (and (>= ch ?A) (<= ch ?Z))) | |
593 | (if (and (not ethio-quote-vowel-always) | |
594 | (memq ch '(?e ?a ?u ?i ?o ?E ?A ?I))) | |
595 | (delete-char 1)) | |
596 | (delete-char 1)))) | |
597 | ||
598 | ;; ethio-W-sixth-always | |
599 | (unless ethio-W-sixth-always | |
600 | (goto-char (point-min)) | |
601 | (while (search-forward "W'" nil t) | |
602 | (delete-char -1) | |
603 | (insert "u"))) | |
4ed46869 | 604 | |
9017ac97 KH |
605 | ;; ethio-numeric-reduction |
606 | (when (> ethio-numeric-reduction 0) | |
607 | (goto-char (point-min)) | |
608 | (while (re-search-forward "\\([0-9]\\)`\\([0-9]\\)" nil t) | |
609 | (replace-match "\\1\\2") | |
610 | (forward-char -1))) | |
611 | (when (= ethio-numeric-reduction 2) | |
612 | (goto-char (point-min)) | |
613 | (while (re-search-forward "\\([0-9]\\)1\\(0+\\)" nil t) | |
614 | (replace-match "\\1\\2"))) | |
615 | ||
616 | (goto-char (point-max))) | |
617 | ||
618 | (cond | |
619 | ((looking-at "[a-z]") | |
620 | (insert"\\~eng ") | |
621 | (setq mode 'english)) | |
622 | ((looking-at "[,.;:'`\\]+") | |
623 | (insert "\\") | |
624 | (goto-char (1+ (match-end 0)))) | |
625 | ((= (following-char) ??) | |
626 | (if ethio-use-three-dot-question | |
627 | (insert "\\")) | |
628 | (forward-char 1)) | |
629 | ((looking-at "[<&]") | |
630 | (if (or (and (boundp 'ethio-sera-being-called-by-w3) | |
631 | ethio-sera-being-called-by-w3) | |
632 | (and (boundp 'sera-being-called-by-w3) | |
633 | sera-being-called-by-w3)) | |
634 | (search-forward (if (= (following-char) ?<) ">" "&") nil 0) | |
635 | (forward-char 1))))))))) | |
4ed46869 KH |
636 | |
637 | ;;;###autoload | |
60acfd15 KH |
638 | (defun ethio-fidel-to-sera-marker (&optional force) |
639 | "Convert the regions surrounded by \"<sera>\" and \"</sera>\" from FIDEL to SERA. | |
640 | The markers \"<sera>\" and \"</sera>\" themselves are not deleted." | |
4ed46869 | 641 | |
60acfd15 | 642 | (interactive "P") |
4ed46869 | 643 | (if (and buffer-read-only |
60acfd15 | 644 | (not force) |
4ed46869 KH |
645 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) |
646 | (error "")) | |
647 | (save-excursion | |
648 | (goto-char (point-min)) | |
9017ac97 | 649 | (while (search-forward "<sera>" nil t) |
60acfd15 | 650 | (ethio-fidel-to-sera-region |
4ed46869 | 651 | (point) |
9017ac97 | 652 | (if (search-forward "</sera>" nil t) |
4ed46869 KH |
653 | (match-beginning 0) |
654 | (point-max)) | |
655 | nil | |
656 | 'force)))) | |
657 | ||
4ed46869 KH |
658 | ;; |
659 | ;; vowel modification | |
660 | ;; | |
661 | ||
662 | ;;;###autoload | |
60acfd15 | 663 | (defun ethio-modify-vowel nil |
4ed46869 KH |
664 | "Modify the vowel of the FIDEL that is under the cursor." |
665 | (interactive) | |
9017ac97 KH |
666 | (ethio-adjust-robin) |
667 | (let ((consonant (ethio-get-consonant (following-char))) | |
668 | vowel) | |
669 | (if (null consonant) | |
670 | (error "") ; not an Ethiopic char | |
671 | (setq vowel (read-char "Modify vowel to: ")) | |
60acfd15 | 672 | (delete-char 1) |
9017ac97 KH |
673 | (if (and (string= consonant "'") (= vowel ?W)) |
674 | (insert ?ኧ) | |
675 | (save-restriction | |
676 | (narrow-to-region (point) (point)) | |
677 | (insert consonant vowel) | |
678 | (robin-convert-region (point-min) (point-max) "ethiopic-sera")))))) | |
679 | ||
680 | (defun ethio-get-consonant (ch) | |
681 | "Return the consonant part of CH's SERA spelling in ethiopic-sera." | |
682 | (let ((sera (get-char-code-property ch 'ethiopic-sera))) | |
683 | (cond | |
684 | ((null sera) nil) | |
685 | ((= ch ?ኧ) "'") ; Only this has two vowel letters. | |
686 | (t (with-temp-buffer | |
687 | (insert sera) | |
688 | (if (memq (preceding-char) '(?e ?u ?i ?a ?o ?E ?I ?A ?')) | |
689 | (delete-char -1)) | |
690 | (buffer-substring (point-min) (point-max))))))) | |
4ed46869 KH |
691 | |
692 | ;; | |
693 | ;; space replacement | |
694 | ;; | |
695 | ||
696 | ;;;###autoload | |
697 | (defun ethio-replace-space (ch begin end) | |
60acfd15 KH |
698 | "Replace ASCII spaces with Ethiopic word separators in the region. |
699 | ||
700 | In the specified region, replace word separators surrounded by two | |
9017ac97 | 701 | Ethiopic characters, depending on the first argument CH, which should |
60acfd15 KH |
702 | be 1, 2, or 3. |
703 | ||
704 | If CH = 1, word separator will be replaced with an ASCII space. | |
705 | If CH = 2, with two ASCII spaces. | |
706 | If CH = 3, with the Ethiopic colon-like word separator. | |
707 | ||
9017ac97 | 708 | The 2nd and 3rd arguments BEGIN and END specify the region." |
60acfd15 | 709 | |
4ed46869 KH |
710 | (interactive "*cReplace spaces to: 1 (sg col), 2 (dbl col), 3 (Ethiopic)\nr") |
711 | (if (not (memq ch '(?1 ?2 ?3))) | |
712 | (error "")) | |
713 | (save-excursion | |
714 | (save-restriction | |
715 | (narrow-to-region begin end) | |
4ed46869 KH |
716 | |
717 | (cond | |
4ed46869 | 718 | ((= ch ?1) |
60acfd15 KH |
719 | ;; an Ethiopic word separator --> an ASCII space |
720 | (goto-char (point-min)) | |
9017ac97 KH |
721 | (while (search-forward "፡" nil t) |
722 | (replace-match " ")) | |
4ed46869 | 723 | |
60acfd15 KH |
724 | ;; two ASCII spaces between Ethiopic characters --> an ASCII space |
725 | (goto-char (point-min)) | |
726 | (while (re-search-forward "\\(\\ce\\) \\(\\ce\\)" nil t) | |
727 | (replace-match "\\1 \\2") | |
9017ac97 | 728 | (forward-char -1))) |
4ed46869 KH |
729 | |
730 | ((= ch ?2) | |
60acfd15 | 731 | ;; An Ethiopic word separator --> two ASCII spaces |
4ed46869 | 732 | (goto-char (point-min)) |
9017ac97 | 733 | (while (search-forward "፡" nil t) |
60acfd15 | 734 | (replace-match " ")) |
4ed46869 | 735 | |
60acfd15 KH |
736 | ;; An ASCII space between Ethiopic characters --> two ASCII spaces |
737 | (goto-char (point-min)) | |
738 | (while (re-search-forward "\\(\\ce\\) \\(\\ce\\)" nil t) | |
739 | (replace-match "\\1 \\2") | |
9017ac97 | 740 | (forward-char -1))) |
4ed46869 | 741 | |
60acfd15 KH |
742 | (t |
743 | ;; One or two ASCII spaces between Ethiopic characters | |
744 | ;; --> An Ethiopic word separator | |
745 | (goto-char (point-min)) | |
746 | (while (re-search-forward "\\(\\ce\\) ?\\(\\ce\\)" nil t) | |
9017ac97 KH |
747 | (replace-match "\\1፡\\2") |
748 | (forward-char -1)) | |
4ed46869 | 749 | |
60acfd15 KH |
750 | ;; Three or more ASCII spaces between Ethiopic characters |
751 | ;; --> An Ethiopic word separator + (N - 2) ASCII spaces | |
752 | (goto-char (point-min)) | |
9017ac97 KH |
753 | (while (re-search-forward "\\(\\ce\\) \\( +\\ce\\)" nil t) |
754 | (replace-match "\\1፡\\2") | |
755 | (forward-char -1))))))) | |
4ed46869 KH |
756 | |
757 | ;; | |
60acfd15 | 758 | ;; special icons |
4ed46869 KH |
759 | ;; |
760 | ||
9017ac97 | 761 | ;; This function is deprecated. |
4ed46869 KH |
762 | ;;;###autoload |
763 | (defun ethio-input-special-character (arg) | |
9017ac97 KH |
764 | "This function is deprecated." |
765 | (interactive "*cInput number: 1. 2. 3. 4. 5.") | |
4ed46869 KH |
766 | (cond |
767 | ((= arg ?1) | |
9017ac97 | 768 | (insert "")) |
4ed46869 | 769 | ((= arg ?2) |
9017ac97 | 770 | (insert "")) |
4ed46869 | 771 | ((= arg ?3) |
9017ac97 | 772 | (insert "")) |
4ed46869 | 773 | ((= arg ?4) |
9017ac97 | 774 | (insert "")) |
60acfd15 | 775 | ((= arg ?5) |
9017ac97 | 776 | (insert "")) |
4ed46869 KH |
777 | (t |
778 | (error "")))) | |
779 | ||
60acfd15 KH |
780 | ;; |
781 | ;; TeX support | |
782 | ;; | |
783 | ||
60acfd15 KH |
784 | ;;;###autoload |
785 | (defun ethio-fidel-to-tex-buffer nil | |
9017ac97 | 786 | "Convert each fidel characters in the current buffer into a fidel-tex command." |
60acfd15 | 787 | (interactive) |
9017ac97 KH |
788 | (let ((buffer-read-only nil) |
789 | comp ch) | |
60acfd15 | 790 | |
9017ac97 KH |
791 | ;; Special treatment for geminated characters. |
792 | ;; Geminated characters la", etc. change into \geminateG{\laG}, etc. | |
60acfd15 | 793 | (goto-char (point-min)) |
3a549e1c | 794 | (while (re-search-forward "፟\\|" nil t) |
9017ac97 KH |
795 | (setq comp (find-composition (match-beginning 0))) |
796 | (if (null comp) | |
797 | (replace-match "\\\\geminateG{}" t) | |
798 | (decompose-region (car comp) (cadr comp)) | |
799 | (delete-char -1) | |
800 | (forward-char -1) | |
801 | (insert "\\geminateG{") | |
802 | (forward-char 1) | |
803 | (insert "}"))) | |
60acfd15 | 804 | |
e4920bc9 | 805 | ;; Special Ethiopic punctuation. |
60acfd15 | 806 | (goto-char (point-min)) |
9017ac97 KH |
807 | (while (re-search-forward "\\ce[»\\.\\?]\\|«\\ce" nil t) |
808 | (cond | |
809 | ((= (setq ch (preceding-char)) ?\») | |
810 | (delete-char -1) | |
811 | (insert "\\rquoteG")) | |
812 | ((= ch ?.) | |
813 | (delete-char -1) | |
814 | (insert "\\dotG")) | |
815 | ((= ch ??) | |
816 | (delete-char -1) | |
817 | (insert "\\qmarkG")) | |
818 | (t | |
819 | (forward-char -1) | |
820 | (delete-char -1) | |
821 | (insert "\\lquoteG") | |
822 | (forward-char 1)))) | |
60acfd15 KH |
823 | |
824 | ;; Ethiopic characters to TeX macros | |
9017ac97 KH |
825 | (robin-invert-region (point-min) (point-max) "ethiopic-tex") |
826 | ||
60acfd15 KH |
827 | (goto-char (point-min)) |
828 | (set-buffer-modified-p nil))) | |
829 | ||
830 | ;;;###autoload | |
831 | (defun ethio-tex-to-fidel-buffer nil | |
832 | "Convert fidel-tex commands in the current buffer into fidel chars." | |
833 | (interactive) | |
834 | (let ((buffer-read-only nil) | |
835 | (p) (ch)) | |
836 | ||
60acfd15 | 837 | ;; TeX macros to Ethiopic characters |
9017ac97 | 838 | (robin-convert-region (point-min) (point-max) "ethiopic-tex") |
60acfd15 KH |
839 | |
840 | ;; compose geminated characters | |
841 | (goto-char (point-min)) | |
9017ac97 | 842 | (while (re-search-forward "\\\\geminateG{\\(\\ce?\\)}" nil t) |
3a549e1c | 843 | (replace-match "\\1፟")) |
60acfd15 | 844 | |
9017ac97 | 845 | ;; remove redundant braces, if any |
60acfd15 | 846 | (goto-char (point-min)) |
9017ac97 KH |
847 | (while (re-search-forward "{\\(\\ce\\)}" nil t) |
848 | (replace-match "\\1")) | |
60acfd15 KH |
849 | |
850 | (goto-char (point-min)) | |
851 | (set-buffer-modified-p nil))) | |
852 | ||
853 | ;; | |
854 | ;; Java support | |
855 | ;; | |
856 | ||
857 | ;;;###autoload | |
858 | (defun ethio-fidel-to-java-buffer nil | |
859 | "Convert Ethiopic characters into the Java escape sequences. | |
860 | ||
af109896 | 861 | Each escape sequence is of the form \\uXXXX, where XXXX is the |
60acfd15 KH |
862 | character's codepoint (in hex) in Unicode. |
863 | ||
864 | If `ethio-java-save-lowercase' is non-nil, use [0-9a-f]. | |
865 | Otherwise, [0-9A-F]." | |
866 | (let ((ucode)) | |
867 | ||
60acfd15 | 868 | (goto-char (point-min)) |
9017ac97 KH |
869 | (while (re-search-forward "[ሀ-፼]" nil t) |
870 | (setq ucode (preceding-char)) | |
d355a0b7 | 871 | (delete-char -1) |
9017ac97 KH |
872 | (insert |
873 | (format (if ethio-java-save-lowercase "\\u%4x" "\\u%4X") | |
874 | ucode))))) | |
60acfd15 KH |
875 | |
876 | ;;;###autoload | |
877 | (defun ethio-java-to-fidel-buffer nil | |
878 | "Convert the Java escape sequences into corresponding Ethiopic characters." | |
9017ac97 KH |
879 | (let ((case-fold-search t) |
880 | (ucode)) | |
60acfd15 | 881 | (goto-char (point-min)) |
9017ac97 KH |
882 | (while (re-search-forward "\\\\u\\([0-9a-f][0-9a-f][0-9a-f][0-9a-f]\\)" nil t) |
883 | (setq ucode (read (concat "#x" (match-string 1)))) | |
884 | (when (and (>= ucode #x1200) (<= ucode #x137f)) | |
885 | (replace-match (char-to-string ucode)))))) | |
60acfd15 KH |
886 | |
887 | ;; | |
888 | ;; file I/O hooks | |
889 | ;; | |
890 | ||
891 | ;;;###autoload | |
892 | (defun ethio-find-file nil | |
9017ac97 | 893 | "Transliterate file content into Ethiopic dependig on filename suffix." |
60acfd15 KH |
894 | (cond |
895 | ||
896 | ((string-match "\\.sera$" (buffer-file-name)) | |
897 | (save-excursion | |
898 | (ethio-sera-to-fidel-buffer nil 'force) | |
899 | (set-buffer-modified-p nil))) | |
900 | ||
901 | ((string-match "\\.html$" (buffer-file-name)) | |
6b61353c | 902 | (let ((ethio-sera-being-called-by-w3 t)) |
60acfd15 KH |
903 | (save-excursion |
904 | (ethio-sera-to-fidel-marker 'force) | |
905 | (goto-char (point-min)) | |
9017ac97 | 906 | (while (re-search-forward "&[lr]aquo;" nil t) |
60acfd15 | 907 | (if (= (char-after (1+ (match-beginning 0))) ?l) |
9017ac97 KH |
908 | (replace-match "«") |
909 | (replace-match "»"))) | |
60acfd15 KH |
910 | (set-buffer-modified-p nil)))) |
911 | ||
912 | ((string-match "\\.tex$" (buffer-file-name)) | |
913 | (save-excursion | |
914 | (ethio-tex-to-fidel-buffer) | |
915 | (set-buffer-modified-p nil))) | |
916 | ||
917 | ((string-match "\\.java$" (buffer-file-name)) | |
918 | (save-excursion | |
919 | (ethio-java-to-fidel-buffer) | |
920 | (set-buffer-modified-p nil))) | |
921 | ||
922 | (t | |
923 | nil))) | |
924 | ||
925 | ;;;###autoload | |
926 | (defun ethio-write-file nil | |
9017ac97 | 927 | "Transliterate Ethiopic characters in ASCII depending on the file extension." |
60acfd15 KH |
928 | (cond |
929 | ||
930 | ((string-match "\\.sera$" (buffer-file-name)) | |
931 | (save-excursion | |
932 | (ethio-fidel-to-sera-buffer nil 'force) | |
933 | (goto-char (point-min)) | |
934 | (ethio-record-user-preference) | |
935 | (set-buffer-modified-p nil))) | |
936 | ||
937 | ((string-match "\\.html$" (buffer-file-name)) | |
938 | (save-excursion | |
9017ac97 | 939 | (let ((ethio-sera-being-called-by-w3 t)) |
60acfd15 KH |
940 | (ethio-fidel-to-sera-marker 'force) |
941 | (goto-char (point-min)) | |
9017ac97 KH |
942 | (while (re-search-forward "[«»]" nil t) |
943 | (replace-match (if (= (preceding-char) ?«) "«" "»"))) | |
944 | (goto-char (point-min)) | |
60acfd15 KH |
945 | (if (search-forward "<sera>" nil t) |
946 | (ethio-record-user-preference)) | |
60acfd15 KH |
947 | (set-buffer-modified-p nil)))) |
948 | ||
949 | ((string-match "\\.tex$" (buffer-file-name)) | |
950 | (save-excursion | |
951 | (ethio-fidel-to-tex-buffer) | |
952 | (set-buffer-modified-p nil))) | |
953 | ||
954 | ((string-match "\\.java$" (buffer-file-name)) | |
955 | (save-excursion | |
956 | (ethio-fidel-to-java-buffer) | |
957 | (set-buffer-modified-p nil))) | |
958 | ||
959 | (t | |
960 | nil))) | |
961 | ||
962 | (defun ethio-record-user-preference nil | |
60acfd15 | 963 | (insert (if ethio-use-colon-for-colon "\\~-: " "\\~`: ") |
9017ac97 | 964 | (if ethio-use-three-dot-question "\\~`| " "\\~? "))) |
60acfd15 | 965 | |
170a94d2 KH |
966 | ;; |
967 | ;; Ethiopic word separator vs. ASCII space | |
968 | ;; | |
969 | ||
970 | (defvar ethio-prefer-ascii-space t) | |
971 | (make-variable-buffer-local 'ethio-prefer-ascii-space) | |
972 | ||
973 | (defun ethio-toggle-space nil | |
974 | "Toggle ASCII space and Ethiopic separator for keyboard input." | |
975 | (interactive) | |
976 | (setq ethio-prefer-ascii-space | |
9017ac97 | 977 | (not ethio-prefer-ascii-space))) |
170a94d2 KH |
978 | |
979 | (defun ethio-insert-space (arg) | |
980 | "Insert ASCII spaces or Ethiopic word separators depending on context. | |
981 | ||
982 | If the current word separator (indicated in mode-line) is the ASCII space, | |
983 | insert an ASCII space. With ARG, insert that many ASCII spaces. | |
984 | ||
985 | If the current word separator is the colon-like Ethiopic word | |
986 | separator and the point is preceded by `an Ethiopic punctuation mark | |
987 | followed by zero or more ASCII spaces', then insert also an ASCII | |
988 | space. With ARG, insert that many ASCII spaces. | |
989 | ||
990 | Otherwise, insert a colon-like Ethiopic word separator. With ARG, insert that | |
991 | many Ethiopic word separators." | |
992 | ||
993 | (interactive "*p") | |
994 | (cond | |
995 | (ethio-prefer-ascii-space | |
996 | (insert-char 32 arg)) | |
997 | ((save-excursion | |
998 | (skip-chars-backward " ") | |
999 | (memq (preceding-char) | |
9017ac97 | 1000 | '(?፡ ?። ?፣ ?፤ ?፥ ?፦ ?፧ ?፨ ? ? ? ? ?))) |
170a94d2 KH |
1001 | (insert-char 32 arg)) |
1002 | (t | |
9017ac97 | 1003 | (insert-char ?፡ arg)))) |
170a94d2 | 1004 | |
9017ac97 | 1005 | ;;;###autoload |
170a94d2 KH |
1006 | (defun ethio-insert-ethio-space (arg) |
1007 | "Insert the Ethiopic word delimiter (the colon-like character). | |
1008 | With ARG, insert that many delimiters." | |
1009 | (interactive "*p") | |
9017ac97 | 1010 | (insert-char ?፡ arg)) |
170a94d2 KH |
1011 | |
1012 | ;; | |
1013 | ;; Gemination | |
1014 | ;; | |
1015 | ||
9017ac97 | 1016 | ;;;###autoload |
a5787fe3 | 1017 | (defun ethio-composition-function (pos to font-object string) |
9017ac97 | 1018 | (setq pos (1- pos)) |
3a549e1c | 1019 | (let ((pattern "\\ce\\(፟\\|\\)")) |
9017ac97 KH |
1020 | (if string |
1021 | (if (and (>= pos 0) | |
1022 | (eq (string-match pattern string pos) pos)) | |
1023 | (prog1 (match-end 0) | |
1024 | (compose-string string pos (match-end 0)))) | |
1025 | (if (>= pos (point-min)) | |
1026 | (progn | |
1027 | (goto-char pos) | |
1028 | (if (looking-at pattern) | |
1029 | (prog1 (match-end 0) | |
1030 | (compose-region pos (match-end 0))))))))) | |
1031 | ||
1032 | ;; This function is not used any more. | |
170a94d2 KH |
1033 | (defun ethio-gemination nil |
1034 | "Compose the character before the point with the Ethiopic gemination mark. | |
c256b4ab | 1035 | If the character is already composed, decompose it and remove the gemination |
170a94d2 KH |
1036 | mark." |
1037 | (interactive "*") | |
9017ac97 KH |
1038 | (let ((ch (preceding-char))) |
1039 | (cond | |
1040 | ((and (= ch ?) (find-composition (1- (point)))) | |
1041 | (decompose-region (- (point) 2) (point))) | |
1042 | ((and (>= ch #x1200) (<= ch #x137f)) | |
1043 | (insert "") | |
1044 | (compose-region (- (point) 2) (point))) | |
1045 | (t | |
1046 | (error ""))))) | |
1047 | ||
1048 | ;;; | |
1049 | ;;; Robin packages | |
1050 | ;;; | |
1051 | ||
1052 | (robin-define-package "ethiopic-sera" | |
1053 | "SERA transliteration system for Ethiopic." | |
1054 | ||
1055 | ("he" ?ሀ) | |
1056 | ("hu" ?ሁ) | |
1057 | ("hi" ?ሂ) | |
1058 | ("ha" ?ሃ) | |
1059 | ("hE" ?ሄ) ("hee" "ሄ") | |
1060 | ("h" ?ህ) | |
1061 | ("ho" ?ሆ) | |
1062 | ||
1063 | ("le" ?ለ) ("Le" "ለ") | |
1064 | ("lu" ?ሉ) ("Lu" "ሉ") | |
1065 | ("li" ?ሊ) ("Li" "ሊ") | |
1066 | ("la" ?ላ) ("La" "ላ") | |
1067 | ("lE" ?ሌ) ("LE" "ሌ") ("lee" "ሌ") ("Lee" "ሌ") | |
1068 | ("l" ?ል) ("L" "ል") | |
1069 | ("lo" ?ሎ) ("Lo" "ሎ") | |
1070 | ("lWa" ?ሏ) ("LWa" "ሏ") ("lW" "ሏ") ("LW" "ሏ") | |
1071 | ||
1072 | ("He" ?ሐ) | |
1073 | ("Hu" ?ሑ) | |
1074 | ("Hi" ?ሒ) | |
1075 | ("Ha" ?ሓ) | |
1076 | ("HE" ?ሔ) ("Hee" "ሔ") | |
1077 | ("H" ?ሕ) | |
1078 | ("Ho" ?ሖ) | |
1079 | ("HWa" ?ሗ) ("HW" "ሗ") | |
1080 | ||
1081 | ("me" ?መ) ("Me" "መ") | |
1082 | ("mu" ?ሙ) ("Mu" "ሙ") | |
1083 | ("mi" ?ሚ) ("Mi" "ሚ") | |
1084 | ("ma" ?ማ) ("Ma" "ማ") | |
1085 | ("mE" ?ሜ) ("ME" "ሜ") ("mee" "ሜ") ("Mee" "ሜ") | |
1086 | ("m" ?ም) ("M" "ም") | |
1087 | ("mo" ?ሞ) ("Mo" "ሞ") | |
1088 | ("mWa" ?ሟ) ("MWa" "ሟ") ("mW" "ሟ") ("MW" "ሟ") | |
1089 | ||
1090 | ("`se" ?ሠ) ("sse" "ሠ") ("s2e" "ሠ") | |
1091 | ("`su" ?ሡ) ("ssu" "ሡ") ("s2u" "ሡ") | |
1092 | ("`si" ?ሢ) ("ssi" "ሢ") ("s2i" "ሢ") | |
1093 | ("`sa" ?ሣ) ("ssa" "ሣ") ("s2a" "ሣ") | |
1094 | ("`sE" ?ሤ) ("ssE" "ሤ") ("s2E" "ሤ") | |
1095 | ("`see" "ሤ") ("ssee" "ሤ") ("s2ee" "ሤ") | |
1096 | ("`s" ?ሥ) ("ss" "ሥ") ("s2" "ሥ") | |
1097 | ("`so" ?ሦ) ("sso" "ሦ") ("s2o" "ሦ") | |
1098 | ("`sWa" ?ሧ) ("ssWa" "ሧ") ("s2Wa" "ሧ") | |
1099 | ("`sW" "ሧ") ("ssW" "ሧ") ("s2W" "ሧ") | |
1100 | ||
1101 | ("re" ?ረ) ("Re" "ረ") | |
1102 | ("ru" ?ሩ) ("Ru" "ሩ") | |
1103 | ("ri" ?ሪ) ("Ri" "ሪ") | |
1104 | ("ra" ?ራ) ("Ra" "ራ") | |
1105 | ("rE" ?ሬ) ("RE" "ሬ") ("ree" "ሬ") ("Ree" "ሬ") | |
1106 | ("r" ?ር) ("R" "ር") | |
1107 | ("ro" ?ሮ) ("Ro" "ሮ") | |
1108 | ("rWa" ?ሯ) ("RWa" "ሯ") ("rW" "ሯ") ("RW" "ሯ") | |
1109 | ||
1110 | ("se" ?ሰ) | |
1111 | ("su" ?ሱ) | |
1112 | ("si" ?ሲ) | |
1113 | ("sa" ?ሳ) | |
1114 | ("sE" ?ሴ) ("see" "ሴ") | |
1115 | ("s" ?ስ) | |
1116 | ("so" ?ሶ) | |
1117 | ("sWa" ?ሷ) ("sW" "ሷ") | |
1118 | ||
1119 | ("xe" ?ሸ) | |
1120 | ("xu" ?ሹ) | |
1121 | ("xi" ?ሺ) | |
1122 | ("xa" ?ሻ) | |
1123 | ("xE" ?ሼ) ("xee" "ሼ") | |
1124 | ("x" ?ሽ) | |
1125 | ("xo" ?ሾ) | |
1126 | ("xWa" ?ሿ) ("xW" "ሿ") | |
1127 | ||
1128 | ("qe" ?ቀ) | |
1129 | ("qu" ?ቁ) | |
1130 | ("qi" ?ቂ) | |
1131 | ("qa" ?ቃ) | |
1132 | ("qE" ?ቄ) ("qee" "ቄ") | |
1133 | ("q" ?ቅ) | |
1134 | ("qo" ?ቆ) | |
1135 | ("qWe" ?ቈ) | |
1136 | ("qWi" ?ቊ) | |
1137 | ("qWa" ?ቋ) ("qW" "ቋ") | |
1138 | ("qWE" ?ቌ) ("qWee" "ቌ") | |
1139 | ("qW'" ?ቍ) ("qWu" "ቍ") | |
1140 | ||
1141 | ("Qe" ?ቐ) | |
1142 | ("Qu" ?ቑ) | |
1143 | ("Qi" ?ቒ) | |
1144 | ("Qa" ?ቓ) | |
1145 | ("QE" ?ቔ) ("Qee" "ቔ") | |
1146 | ("Q" ?ቕ) | |
1147 | ("Qo" ?ቖ) | |
1148 | ("QWe" ?ቘ) | |
1149 | ("QWi" ?ቚ) | |
1150 | ("QWa" ?ቛ) ("QW" "ቛ") | |
1151 | ("QWE" ?ቜ) ("QWee" "ቜ") | |
1152 | ("QW'" ?ቝ) ("QWu" "ቝ") | |
1153 | ||
1154 | ("be" ?በ) ("Be" "በ") | |
1155 | ("bu" ?ቡ) ("Bu" "ቡ") | |
1156 | ("bi" ?ቢ) ("Bi" "ቢ") | |
1157 | ("ba" ?ባ) ("Ba" "ባ") | |
1158 | ("bE" ?ቤ) ("BE" "ቤ") ("bee" "ቤ") ("Bee" "ቤ") | |
1159 | ("b" ?ብ) ("B" "ብ") | |
1160 | ("bo" ?ቦ) ("Bo" "ቦ") | |
1161 | ("bWa" ?ቧ) ("BWa" "ቧ") ("bW" "ቧ") ("BW" "ቧ") | |
1162 | ||
1163 | ("ve" ?ቨ) ("Ve" "ቨ") | |
1164 | ("vu" ?ቩ) ("Vu" "ቩ") | |
1165 | ("vi" ?ቪ) ("Vi" "ቪ") | |
1166 | ("va" ?ቫ) ("Va" "ቫ") | |
1167 | ("vE" ?ቬ) ("VE" "ቬ") ("vee" "ቬ") ("Vee" "ቬ") | |
1168 | ("v" ?ቭ) ("V" "ቭ") | |
1169 | ("vo" ?ቮ) ("Vo" "ቮ") | |
1170 | ("vWa" ?ቯ) ("VWa" "ቯ") ("vW" "ቯ") ("VW" "ቯ") | |
1171 | ||
1172 | ("te" ?ተ) | |
1173 | ("tu" ?ቱ) | |
1174 | ("ti" ?ቲ) | |
1175 | ("ta" ?ታ) | |
1176 | ("tE" ?ቴ) ("tee" "ቴ") | |
1177 | ("t" ?ት) | |
1178 | ("to" ?ቶ) | |
1179 | ("tWa" ?ቷ) ("tW" "ቷ") | |
1180 | ||
1181 | ("ce" ?ቸ) | |
1182 | ("cu" ?ቹ) | |
1183 | ("ci" ?ቺ) | |
1184 | ("ca" ?ቻ) | |
1185 | ("cE" ?ቼ) ("cee" "ቼ") | |
1186 | ("c" ?ች) | |
1187 | ("co" ?ቾ) | |
1188 | ("cWa" ?ቿ) ("cW" "ቿ") | |
1189 | ||
1190 | ("`he" ?ኀ) ("hhe" "ኀ") ("h2e" "ኀ") | |
1191 | ("`hu" ?ኁ) ("hhu" "ኁ") ("h2u" "ኁ") | |
1192 | ("`hi" ?ኂ) ("hhi" "ኂ") ("h2i" "ኂ") | |
1193 | ("`ha" ?ኃ) ("hha" "ኃ") ("h2a" "ኃ") | |
1194 | ("`hE" ?ኄ) ("hhE" "ኄ") ("h2E" "ኄ") | |
1195 | ("`hee" "ኄ") ("hhee" "ኄ") ("h2ee" "ኄ") | |
1196 | ("`h" ?ኅ) ("hh" "ኅ") ("h2" "ኅ") | |
1197 | ("`ho" ?ኆ) ("hho" "ኆ") ("h2o" "ኆ") | |
1198 | ("`hWe" ?ኈ) ("hhWe" "ኈ") ("h2We" "ኈ") ("hWe" "ኈ") | |
1199 | ("`hWi" ?ኊ) ("hhWi" "ኊ") ("h2Wi" "ኊ") ("hWi" "ኊ") | |
1200 | ("`hWa" ?ኋ) ("hhWa" "ኋ") ("h2Wa" "ኋ") ("hWa" "ኋ") | |
1201 | ("`hW" "ኋ") ("hhW" "ኋ") ("h2W" "ኋ") | |
1202 | ("`hWE" ?ኌ) ("hhWE" "ኌ") ("h2WE" "ኌ") ("hWE" "ኌ") | |
1203 | ("`hWee" "ኌ") ("hhWee" "ኌ") ("h2Wee" "ኌ") ("hWee" "ኌ") | |
1204 | ("`hW'" ?ኍ) ("hhW'" "ኍ") ("h2W'" "ኍ") ("hW'" "ኍ") | |
1205 | ("`hWu" "ኍ") ("hhWu" "ኍ") ("h2Wu" "ኍ") ("hWu" "ኍ") | |
1206 | ||
1207 | ("ne" ?ነ) | |
1208 | ("nu" ?ኑ) | |
1209 | ("ni" ?ኒ) | |
1210 | ("na" ?ና) | |
1211 | ("nE" ?ኔ) ("nee" "ኔ") | |
1212 | ("n" ?ን) | |
1213 | ("no" ?ኖ) | |
1214 | ("nWa" ?ኗ) ("nW" "ኗ") | |
1215 | ||
1216 | ("Ne" ?ኘ) | |
1217 | ("Nu" ?ኙ) | |
1218 | ("Ni" ?ኚ) | |
1219 | ("Na" ?ኛ) | |
1220 | ("NE" ?ኜ) ("Nee" "ኜ") | |
1221 | ("N" ?ኝ) | |
1222 | ("No" ?ኞ) | |
1223 | ("NWa" ?ኟ) ("NW" "ኟ") | |
1224 | ||
1225 | ("'A" ?አ) ("A" "አ") | |
1226 | ("'u" ?ኡ) ("u" "ኡ") ("'U" "ኡ") ("U" "ኡ") | |
1227 | ("'i" ?ኢ) ("i" "ኢ") | |
1228 | ("'a" ?ኣ) ("a" "ኣ") | |
1229 | ("'E" ?ኤ) ("E" "ኤ") | |
1230 | ("'I" ?እ) ("I" "እ") ("'e" "እ") ("e" "እ") | |
1231 | ("'o" ?ኦ) ("o" "ኦ") ("'O" "ኦ") ("O" "ኦ") | |
1232 | ("'ea" ?ኧ) ("ea" "ኧ") | |
1233 | ||
1234 | ("ke" ?ከ) | |
1235 | ("ku" ?ኩ) | |
1236 | ("ki" ?ኪ) | |
1237 | ("ka" ?ካ) | |
1238 | ("kE" ?ኬ) ("kee" "ኬ") | |
1239 | ("k" ?ክ) | |
1240 | ("ko" ?ኮ) | |
1241 | ("kWe" ?ኰ) | |
1242 | ("kWi" ?ኲ) | |
1243 | ("kWa" ?ኳ) ("kW" "ኳ") | |
1244 | ("kWE" ?ኴ) ("kWee" "ኴ") | |
1245 | ("kW'" ?ኵ) ("kWu" "ኵ") | |
1246 | ||
1247 | ("Ke" ?ኸ) | |
1248 | ("Ku" ?ኹ) | |
1249 | ("Ki" ?ኺ) | |
1250 | ("Ka" ?ኻ) | |
1251 | ("KE" ?ኼ) ("Kee" "ኼ") | |
1252 | ("K" ?ኽ) | |
1253 | ("Ko" ?ኾ) | |
1254 | ("KWe" ?ዀ) | |
1255 | ("KWi" ?ዂ) | |
1256 | ("KWa" ?ዃ) ("KW" "ዃ") | |
1257 | ("KWE" ?ዄ) ("KWee" "ዄ") | |
1258 | ("KW'" ?ዅ) ("KWu" "ዅ") | |
1259 | ||
1260 | ("we" ?ወ) | |
1261 | ("wu" ?ዉ) | |
1262 | ("wi" ?ዊ) | |
1263 | ("wa" ?ዋ) | |
1264 | ("wE" ?ዌ) ("wee" "ዌ") | |
1265 | ("w" ?ው) | |
1266 | ("wo" ?ዎ) | |
1267 | ||
1268 | ("`e" ?ዐ) ("ae" "ዐ") ("aaa" "ዐ") ("e2" "ዐ") | |
1269 | ("`u" ?ዑ) ("uu" "ዑ") ("u2" "ዑ") ("`U" "ዑ") ("UU" "ዑ") ("U2" "ዑ") | |
1270 | ("`i" ?ዒ) ("ii" "ዒ") ("i2" "ዒ") | |
1271 | ("`a" ?ዓ) ("aa" "ዓ") ("a2" "ዓ") ("`A" "ዓ") ("AA" "ዓ") ("A2" "ዓ") | |
1272 | ("`E" ?ዔ) ("EE" "ዔ") ("E2" "ዔ") | |
1273 | ("`I" ?ዕ) ("II" "ዕ") ("I2" "ዕ") ("ee" "ዕ") | |
1274 | ("`o" ?ዖ) ("oo" "ዖ") ("o2" "ዖ") ("`O" "ዖ") ("OO" "ዖ") ("O2" "ዖ") | |
1275 | ||
1276 | ("ze" ?ዘ) | |
1277 | ("zu" ?ዙ) | |
1278 | ("zi" ?ዚ) | |
1279 | ("za" ?ዛ) | |
1280 | ("zE" ?ዜ) ("zee" "ዜ") | |
1281 | ("z" ?ዝ) | |
1282 | ("zo" ?ዞ) | |
1283 | ("zWa" ?ዟ) ("zW" "ዟ") | |
1284 | ||
1285 | ("Ze" ?ዠ) | |
1286 | ("Zu" ?ዡ) | |
1287 | ("Zi" ?ዢ) | |
1288 | ("Za" ?ዣ) | |
1289 | ("ZE" ?ዤ) ("Zee" "ዤ") | |
1290 | ("Z" ?ዥ) | |
1291 | ("Zo" ?ዦ) | |
1292 | ("ZWa" ?ዧ) ("ZW" "ዧ") | |
1293 | ||
1294 | ("ye" ?የ) ("Ye" "የ") | |
1295 | ("yu" ?ዩ) ("Yu" "ዩ") | |
1296 | ("yi" ?ዪ) ("Yi" "ዪ") | |
1297 | ("ya" ?ያ) ("Ya" "ያ") | |
1298 | ("yE" ?ዬ) ("YE" "ዬ") ("yee" "ዬ") ("Yee" "ዬ") | |
1299 | ("y" ?ይ) ("Y" "ይ") | |
1300 | ("yo" ?ዮ) ("Yo" "ዮ") | |
1301 | ||
1302 | ("de" ?ደ) | |
1303 | ("du" ?ዱ) | |
1304 | ("di" ?ዲ) | |
1305 | ("da" ?ዳ) | |
1306 | ("dE" ?ዴ) ("dee" "ዴ") | |
1307 | ("d" ?ድ) | |
1308 | ("do" ?ዶ) | |
1309 | ("dWa" ?ዷ) ("dW" "ዷ") | |
1310 | ||
1311 | ("De" ?ዸ) | |
1312 | ("Du" ?ዹ) | |
1313 | ("Di" ?ዺ) | |
1314 | ("Da" ?ዻ) | |
1315 | ("DE" ?ዼ) ("Dee" "ዼ") | |
1316 | ("D" ?ዽ) | |
1317 | ("Do" ?ዾ) | |
1318 | ("DWa" ?ዿ) ("DW" "ዿ") | |
1319 | ||
1320 | ("je" ?ጀ) ("Je" "ጀ") | |
1321 | ("ju" ?ጁ) ("Ju" "ጁ") | |
1322 | ("ji" ?ጂ) ("Ji" "ጂ") | |
1323 | ("ja" ?ጃ) ("Ja" "ጃ") | |
1324 | ("jE" ?ጄ) ("JE" "ጄ") ("jee" "ጄ") ("Jee" "ጄ") | |
1325 | ("j" ?ጅ) ("J" "ጅ") | |
1326 | ("jo" ?ጆ) ("Jo" "ጆ") | |
1327 | ("jWa" ?ጇ) ("jW" "ጇ") ("JWa" "ጇ") ("JW" "ጇ") | |
1328 | ||
1329 | ("ge" ?ገ) | |
1330 | ("gu" ?ጉ) | |
1331 | ("gi" ?ጊ) | |
1332 | ("ga" ?ጋ) | |
1333 | ("gE" ?ጌ) ("gee" "ጌ") | |
1334 | ("g" ?ግ) | |
1335 | ("go" ?ጎ) | |
1336 | ("gWe" ?ጐ) | |
1337 | ("gWi" ?ጒ) | |
1338 | ("gWa" ?ጓ) ("gW" "ጓ") | |
1339 | ("gWE" ?ጔ) ("gWee" "ጔ") | |
1340 | ("gW'" ?ጕ) ("gWu" "ጕ") | |
1341 | ||
1342 | ("Ge" ?ጘ) | |
1343 | ("Gu" ?ጙ) | |
1344 | ("Gi" ?ጚ) | |
1345 | ("Ga" ?ጛ) | |
1346 | ("GE" ?ጜ) ("Gee" "ጜ") | |
1347 | ("G" ?ጝ) | |
1348 | ("Go" ?ጞ) | |
1349 | ||
1350 | ("Te" ?ጠ) | |
1351 | ("Tu" ?ጡ) | |
1352 | ("Ti" ?ጢ) | |
1353 | ("Ta" ?ጣ) | |
1354 | ("TE" ?ጤ) ("Tee" "ጤ") | |
1355 | ("T" ?ጥ) | |
1356 | ("To" ?ጦ) | |
1357 | ("TWa" ?ጧ) ("TW" "ጧ") | |
1358 | ||
1359 | ("Ce" ?ጨ) | |
1360 | ("Cu" ?ጩ) | |
1361 | ("Ci" ?ጪ) | |
1362 | ("Ca" ?ጫ) | |
1363 | ("CE" ?ጬ) ("Cee" "ጬ") | |
1364 | ("C" ?ጭ) | |
1365 | ("Co" ?ጮ) | |
1366 | ("CWa" ?ጯ) ("CW" "ጯ") | |
1367 | ||
1368 | ("Pe" ?ጰ) | |
1369 | ("Pu" ?ጱ) | |
1370 | ("Pi" ?ጲ) | |
1371 | ("Pa" ?ጳ) | |
1372 | ("PE" ?ጴ) ("Pee" "ጴ") | |
1373 | ("P" ?ጵ) | |
1374 | ("Po" ?ጶ) | |
1375 | ("PWa" ?ጷ) ("PW" "ጷ") | |
1376 | ||
1377 | ("Se" ?ጸ) | |
1378 | ("Su" ?ጹ) | |
1379 | ("Si" ?ጺ) | |
1380 | ("Sa" ?ጻ) | |
1381 | ("SE" ?ጼ) ("See" "ጼ") | |
1382 | ("S" ?ጽ) | |
1383 | ("So" ?ጾ) | |
1384 | ("SWa" ?ጿ) ("`SWa" "ጿ") ("SSWa" "ጿ") ("S2Wa" "ጿ") | |
1385 | ("SW" "ጿ") ("`SW" "ጿ") ("SSW" "ጿ") ("S2W" "ጿ") | |
1386 | ||
1387 | ("`Se" ?ፀ) ("SSe" "ፀ") ("S2e" "ፀ") | |
1388 | ("`Su" ?ፁ) ("SSu" "ፁ") ("S2u" "ፁ") | |
1389 | ("`Si" ?ፂ) ("SSi" "ፂ") ("S2i" "ፂ") | |
1390 | ("`Sa" ?ፃ) ("SSa" "ፃ") ("S2a" "ፃ") | |
1391 | ("`SE" ?ፄ) ("SSE" "ፄ") ("S2E" "ፄ") | |
1392 | ("`See" "ፄ") ("SSee" "ፄ") ("S2ee" "ፄ") | |
1393 | ("`S" ?ፅ) ("SS" "ፅ") ("S2" "ፅ") | |
1394 | ("`So" ?ፆ) ("SSo" "ፆ") ("S2o" "ፆ") | |
1395 | ||
1396 | ("fe" ?ፈ) ("Fe" "ፈ") | |
1397 | ("fu" ?ፉ) ("Fu" "ፉ") | |
1398 | ("fi" ?ፊ) ("Fi" "ፊ") | |
1399 | ("fa" ?ፋ) ("Fa" "ፋ") | |
1400 | ("fE" ?ፌ) ("FE" "ፌ") ("fee" "ፌ") ("Fee" "ፌ") | |
1401 | ("f" ?ፍ) ("F" "ፍ") | |
1402 | ("fo" ?ፎ) ("Fo" "ፎ") | |
1403 | ("fWa" ?ፏ) ("FWa" "ፏ") ("fW" "ፏ") ("FW" "ፏ") | |
1404 | ||
1405 | ("pe" ?ፐ) | |
1406 | ("pu" ?ፑ) | |
1407 | ("pi" ?ፒ) | |
1408 | ("pa" ?ፓ) | |
1409 | ("pE" ?ፔ) ("pee" "ፔ") | |
1410 | ("p" ?ፕ) | |
1411 | ("po" ?ፖ) | |
1412 | ("pWa" ?ፗ) ("pW" "ፗ") | |
1413 | ||
1414 | ("rYa" ?ፘ) ("RYa" "ፘ") ("rY" "ፘ") ("RY" "ፘ") | |
1415 | ("mYa" ?ፙ) ("MYa" "ፙ") ("mY" "ፙ") ("MY" "ፙ") | |
1416 | ("fYa" ?ፚ) ("FYa" "ፚ") ("fY" "ፚ") ("FY" "ፚ") | |
1417 | ||
1418 | (" : " ?፡) (":" "፡") ("`:" "፡") | |
1419 | ("::" ?።) ("." "።") | |
1420 | ("," ?፣) | |
1421 | (";" ?፤) | |
1422 | ("-:" ?፥) | |
1423 | (":-" ?፦) | |
1424 | ("`?" ?፧) ("??" "፧") | |
1425 | (":|:" ?፨) ("**" "፨") | |
1426 | ||
1427 | ;; Explicit syllable delimiter | |
1428 | ("'" "") | |
1429 | ||
1430 | ;; Quick ASCII input | |
1431 | ("''" "'") | |
1432 | (":::" ":") | |
1433 | (".." ".") | |
1434 | (",," ",") | |
1435 | (";;" ";") | |
1436 | ||
1437 | ("`1" ?፩) | |
1438 | ("`2" ?፪) | |
1439 | ("`3" ?፫) | |
1440 | ("`4" ?፬) | |
1441 | ("`5" ?፭) | |
1442 | ("`6" ?፮) | |
1443 | ("`7" ?፯) | |
1444 | ("`8" ?፰) | |
1445 | ("`9" ?፱) | |
1446 | ("`10" ?፲) | |
1447 | ("`20" ?፳) | |
1448 | ("`30" ?፴) | |
1449 | ("`40" ?፵) | |
1450 | ("`50" ?፶) | |
1451 | ("`60" ?፷) | |
1452 | ("`70" ?፸) | |
1453 | ("`80" ?፹) | |
1454 | ("`90" ?፺) | |
1455 | ("`100" ?፻) | |
1456 | ("`10000" ?፼) | |
1457 | ||
1458 | ("`200" "፪፻") | |
1459 | ("`300" "፫፻") | |
1460 | ("`400" "፬፻") | |
1461 | ("`500" "፭፻") | |
1462 | ("`600" "፮፻") | |
1463 | ("`700" "፯፻") | |
1464 | ("`800" "፰፻") | |
1465 | ("`900" "፱፻") | |
1466 | ("`1000" "፲፻") | |
1467 | ("`2000" "፳፻") | |
1468 | ("`3000" "፴፻") | |
1469 | ("`4000" "፵፻") | |
1470 | ("`5000" "፶፻") | |
1471 | ("`6000" "፷፻") | |
1472 | ("`7000" "፸፻") | |
1473 | ("`8000" "፹፻") | |
1474 | ("`9000" "፺፻") | |
1475 | ("`20000" "፪፼") | |
1476 | ("`30000" "፫፼") | |
1477 | ("`40000" "፬፼") | |
1478 | ("`50000" "፭፼") | |
1479 | ("`60000" "፮፼") | |
1480 | ("`70000" "፯፼") | |
1481 | ("`80000" "፰፼") | |
1482 | ("`90000" "፱፼") | |
1483 | ("`100000" "፲፼") | |
1484 | ("`200000" "፳፼") | |
1485 | ("`300000" "፴፼") | |
1486 | ("`400000" "፵፼") | |
1487 | ("`500000" "፶፼") | |
1488 | ("`600000" "፷፼") | |
1489 | ("`700000" "፸፼") | |
1490 | ("`800000" "፹፼") | |
1491 | ("`900000" "፺፼") | |
1492 | ("`1000000" "፻፼") | |
1493 | ) | |
1494 | ||
1495 | (register-input-method | |
1496 | "ethiopic-sera" "Ethiopic" | |
1497 | 'robin-use-package "et" "An input method for Ethiopic.") | |
1498 | ||
1499 | (robin-define-package "ethiopic-tex" | |
1500 | "TeX transliteration system for Ethiopic." | |
1501 | ||
1502 | ("\\heG" ?ሀ) ; U+1200 .. | |
1503 | ("\\huG" ?ሁ) | |
1504 | ("\\hiG" ?ሂ) | |
1505 | ("\\haG" ?ሃ) | |
1506 | ("\\hEG" ?ሄ) | |
1507 | ("\\hG" ?ህ) | |
1508 | ("\\hoG" ?ሆ) | |
1509 | ;; reserved | |
1510 | ("\\leG" ?ለ) | |
1511 | ("\\luG" ?ሉ) | |
1512 | ("\\liG" ?ሊ) | |
1513 | ("\\laG" ?ላ) | |
1514 | ("\\lEG" ?ሌ) | |
1515 | ("\\lG" ?ል) | |
1516 | ("\\loG" ?ሎ) | |
1517 | ("\\lWaG" ?ሏ) | |
1518 | ||
1519 | ("\\HeG" ?ሐ) ; U+1210 .. | |
1520 | ("\\HuG" ?ሑ) | |
1521 | ("\\HiG" ?ሒ) | |
1522 | ("\\HaG" ?ሓ) | |
1523 | ("\\HEG" ?ሔ) | |
1524 | ("\\HG" ?ሕ) | |
1525 | ("\\HoG" ?ሖ) | |
1526 | ("\\HWaG" ?ሗ) | |
1527 | ("\\meG" ?መ) | |
1528 | ("\\muG" ?ሙ) | |
1529 | ("\\miG" ?ሚ) | |
1530 | ("\\maG" ?ማ) | |
1531 | ("\\mEG" ?ሜ) | |
1532 | ("\\mG" ?ም) | |
1533 | ("\\moG" ?ሞ) | |
1534 | ("\\mWaG" ?ሟ) | |
1535 | ||
1536 | ("\\sseG" ?ሠ) ; U+1220 .. | |
1537 | ("\\ssuG" ?ሡ) | |
1538 | ("\\ssiG" ?ሢ) | |
1539 | ("\\ssaG" ?ሣ) | |
1540 | ("\\ssEG" ?ሤ) | |
1541 | ("\\ssG" ?ሥ) | |
1542 | ("\\ssoG" ?ሦ) | |
1543 | ("\\ssWaG" ?ሧ) | |
1544 | ("\\reG" ?ረ) | |
1545 | ("\\ruG" ?ሩ) | |
1546 | ("\\riG" ?ሪ) | |
1547 | ("\\raG" ?ራ) | |
1548 | ("\\rEG" ?ሬ) | |
1549 | ("\\rG" ?ር) | |
1550 | ("\\roG" ?ሮ) | |
1551 | ("\\rWaG" ?ሯ) | |
1552 | ||
1553 | ("\\seG" ?ሰ) ; U+1230 .. | |
1554 | ("\\suG" ?ሱ) | |
1555 | ("\\siG" ?ሲ) | |
1556 | ("\\saG" ?ሳ) | |
1557 | ("\\sEG" ?ሴ) | |
1558 | ("\\sG" ?ስ) | |
1559 | ("\\soG" ?ሶ) | |
1560 | ("\\sWaG" ?ሷ) | |
1561 | ("\\xeG" ?ሸ) | |
1562 | ("\\xuG" ?ሹ) | |
1563 | ("\\xiG" ?ሺ) | |
1564 | ("\\xaG" ?ሻ) | |
1565 | ("\\xEG" ?ሼ) | |
1566 | ("\\xG" ?ሽ) | |
1567 | ("\\xoG" ?ሾ) | |
1568 | ("\\xWaG" ?ሿ) | |
1569 | ||
1570 | ("\\qeG" ?ቀ) ; U+1240 .. | |
1571 | ("\\quG" ?ቁ) | |
1572 | ("\\qiG" ?ቂ) | |
1573 | ("\\qaG" ?ቃ) | |
1574 | ("\\qEG" ?ቄ) | |
1575 | ("\\qG" ?ቅ) | |
1576 | ("\\qoG" ?ቆ) | |
1577 | ;; reserved | |
1578 | ("\\qWeG" ?ቈ) | |
1579 | ;; reserved | |
1580 | ("\\qWiG" ?ቊ) | |
1581 | ("\\qWaG" ?ቋ) | |
1582 | ("\\qWEG" ?ቌ) | |
1583 | ("\\qWG" ?ቍ) | |
1584 | ;; reserved | |
1585 | ;; reserved | |
1586 | ||
1587 | ("\\QeG" ?ቐ) ; U+1250 .. | |
1588 | ("\\QuG" ?ቑ) | |
1589 | ("\\QiG" ?ቒ) | |
1590 | ("\\QaG" ?ቓ) | |
1591 | ("\\QEG" ?ቔ) | |
1592 | ("\\QG" ?ቕ) | |
1593 | ("\\QoG" ?ቖ) | |
1594 | ;; reserved | |
1595 | ("\\QWeG" ?ቘ) | |
1596 | ;; reserved | |
1597 | ("\\QWiG" ?ቚ) | |
1598 | ("\\QWaG" ?ቛ) | |
1599 | ("\\QWEG" ?ቜ) | |
1600 | ("\\QWG" ?ቝ) | |
1601 | ;; reserved | |
1602 | ;; reserved | |
1603 | ||
1604 | ("\\beG" ?በ) ; U+1260 .. | |
1605 | ("\\buG" ?ቡ) | |
1606 | ("\\biG" ?ቢ) | |
1607 | ("\\baG" ?ባ) | |
1608 | ("\\bEG" ?ቤ) | |
1609 | ("\\bG" ?ብ) | |
1610 | ("\\boG" ?ቦ) | |
1611 | ("\\bWaG" ?ቧ) | |
1612 | ("\\veG" ?ቨ) | |
1613 | ("\\vuG" ?ቩ) | |
1614 | ("\\viG" ?ቪ) | |
1615 | ("\\vaG" ?ቫ) | |
1616 | ("\\vEG" ?ቬ) | |
1617 | ("\\vG" ?ቭ) | |
1618 | ("\\voG" ?ቮ) | |
1619 | ("\\vWaG" ?ቯ) | |
1620 | ||
1621 | ("\\teG" ?ተ) ; U+1270 .. | |
1622 | ("\\tuG" ?ቱ) | |
1623 | ("\\tiG" ?ቲ) | |
1624 | ("\\taG" ?ታ) | |
1625 | ("\\tEG" ?ቴ) | |
1626 | ("\\tG" ?ት) | |
1627 | ("\\toG" ?ቶ) | |
1628 | ("\\tWaG" ?ቷ) | |
1629 | ("\\ceG" ?ቸ) | |
1630 | ("\\cuG" ?ቹ) | |
1631 | ("\\ciG" ?ቺ) | |
1632 | ("\\caG" ?ቻ) | |
1633 | ("\\cEG" ?ቼ) | |
1634 | ("\\cG" ?ች) | |
1635 | ("\\coG" ?ቾ) | |
1636 | ("\\cWaG" ?ቿ) | |
1637 | ||
1638 | ("\\hheG" ?ኀ) ; U+1280 .. | |
1639 | ("\\hhuG" ?ኁ) | |
1640 | ("\\hhiG" ?ኂ) | |
1641 | ("\\hhaG" ?ኃ) | |
1642 | ("\\hhEG" ?ኄ) | |
1643 | ("\\hhG" ?ኅ) | |
1644 | ("\\hhoG" ?ኆ) | |
1645 | ;; reserved | |
1646 | ("\\hWeG" ?ኈ) | |
1647 | ;; reserved | |
1648 | ("\\hWiG" ?ኊ) | |
1649 | ("\\hWaG" ?ኋ) | |
1650 | ("\\hWEG" ?ኌ) | |
1651 | ("\\hWG" ?ኍ) | |
1652 | ;; reserved | |
1653 | ;; reserved | |
1654 | ||
1655 | ("\\neG" ?ነ) ; U+1290 .. | |
1656 | ("\\nuG" ?ኑ) | |
1657 | ("\\niG" ?ኒ) | |
1658 | ("\\naG" ?ና) | |
1659 | ("\\nEG" ?ኔ) | |
1660 | ("\\nG" ?ን) | |
1661 | ("\\noG" ?ኖ) | |
1662 | ("\\nWaG" ?ኗ) | |
1663 | ("\\NeG" ?ኘ) | |
1664 | ("\\NuG" ?ኙ) | |
1665 | ("\\NiG" ?ኚ) | |
1666 | ("\\NaG" ?ኛ) | |
1667 | ("\\NEG" ?ኜ) | |
1668 | ("\\NG" ?ኝ) | |
1669 | ("\\NoG" ?ኞ) | |
1670 | ("\\NWaG" ?ኟ) | |
1671 | ||
1672 | ("\\eG" ?አ) ; U+12A0 .. | |
1673 | ("\\uG" ?ኡ) | |
1674 | ("\\iG" ?ኢ) | |
1675 | ("\\AG" ?ኣ) | |
1676 | ("\\EG" ?ኤ) | |
1677 | ("\\IG" ?እ) | |
1678 | ("\\oG" ?ኦ) | |
1679 | ("\\eaG" ?ኧ) | |
1680 | ("\\keG" ?ከ) | |
1681 | ("\\kuG" ?ኩ) | |
1682 | ("\\kiG" ?ኪ) | |
1683 | ("\\kaG" ?ካ) | |
1684 | ("\\kEG" ?ኬ) | |
1685 | ("\\kG" ?ክ) | |
1686 | ("\\koG" ?ኮ) | |
1687 | ;; reserved | |
1688 | ||
1689 | ("\\kWeG" ?ኰ) ; U+12B0 .. | |
1690 | ;; reserved | |
1691 | ("\\kWiG" ?ኲ) | |
1692 | ("\\kWaG" ?ኳ) | |
1693 | ("\\kWEG" ?ኴ) | |
1694 | ("\\kWG" ?ኵ) | |
1695 | ;; reserved | |
1696 | ;; reserved | |
1697 | ("\\KeG" ?ኸ) | |
1698 | ("\\KuG" ?ኹ) | |
1699 | ("\\KiG" ?ኺ) | |
1700 | ("\\KaG" ?ኻ) | |
1701 | ("\\KEG" ?ኼ) | |
1702 | ("\\KG" ?ኽ) | |
1703 | ("\\KoG" ?ኾ) | |
1704 | ;; reserved | |
1705 | ||
1706 | ("\\KWeG" ?ዀ) ; U+12C0 .. | |
1707 | ;; reserved | |
1708 | ("\\KWiG" ?ዂ) | |
1709 | ("\\KWaG" ?ዃ) | |
1710 | ("\\KWEG" ?ዄ) | |
1711 | ("\\KWG" ?ዅ) | |
1712 | ;; reserved | |
1713 | ;; reserved | |
1714 | ("\\weG" ?ወ) | |
1715 | ("\\wuG" ?ዉ) | |
1716 | ("\\wiG" ?ዊ) | |
1717 | ("\\waG" ?ዋ) | |
1718 | ("\\wEG" ?ዌ) | |
1719 | ("\\wG" ?ው) | |
1720 | ("\\woG" ?ዎ) | |
1721 | ;; reserved | |
1722 | ||
1723 | ("\\eeG" ?ዐ) ; U+12D0 .. | |
1724 | ("\\uuG" ?ዑ) | |
1725 | ("\\iiG" ?ዒ) | |
1726 | ("\\aaG" ?ዓ) | |
1727 | ("\\EEG" ?ዔ) | |
1728 | ("\\IIG" ?ዕ) | |
1729 | ("\\ooG" ?ዖ) | |
1730 | ;; reserved | |
1731 | ("\\zeG" ?ዘ) | |
1732 | ("\\zuG" ?ዙ) | |
1733 | ("\\ziG" ?ዚ) | |
1734 | ("\\zaG" ?ዛ) | |
1735 | ("\\zEG" ?ዜ) | |
1736 | ("\\zG" ?ዝ) | |
1737 | ("\\zoG" ?ዞ) | |
1738 | ("\\zWaG" ?ዟ) | |
1739 | ||
1740 | ("\\ZeG" ?ዠ) ; U+12E0 .. | |
1741 | ("\\ZuG" ?ዡ) | |
1742 | ("\\ZiG" ?ዢ) | |
1743 | ("\\ZaG" ?ዣ) | |
1744 | ("\\ZEG" ?ዤ) | |
1745 | ("\\ZG" ?ዥ) | |
1746 | ("\\ZoG" ?ዦ) | |
1747 | ("\\ZWaG" ?ዧ) | |
1748 | ("\\yeG" ?የ) | |
1749 | ("\\yuG" ?ዩ) | |
1750 | ("\\yiG" ?ዪ) | |
1751 | ("\\yaG" ?ያ) | |
1752 | ("\\yEG" ?ዬ) | |
1753 | ("\\yG" ?ይ) | |
1754 | ("\\yoG" ?ዮ) | |
1755 | ;; reserved | |
1756 | ||
1757 | ("\\deG" ?ደ) ; U+12F0 .. | |
1758 | ("\\duG" ?ዱ) | |
1759 | ("\\diG" ?ዲ) | |
1760 | ("\\daG" ?ዳ) | |
1761 | ("\\dEG" ?ዴ) | |
1762 | ("\\dG" ?ድ) | |
1763 | ("\\doG" ?ዶ) | |
1764 | ("\\dWaG" ?ዷ) | |
1765 | ("\\DeG" ?ዸ) | |
1766 | ("\\DuG" ?ዹ) | |
1767 | ("\\DiG" ?ዺ) | |
1768 | ("\\DaG" ?ዻ) | |
1769 | ("\\DEG" ?ዼ) | |
1770 | ("\\DG" ?ዽ) | |
1771 | ("\\DoG" ?ዾ) | |
1772 | ("\\DWaG" ?ዿ) | |
1773 | ||
1774 | ("\\jeG" ?ጀ) ; U+1300 .. | |
1775 | ("\\juG" ?ጁ) | |
1776 | ("\\jiG" ?ጂ) | |
1777 | ("\\jaG" ?ጃ) | |
1778 | ("\\jEG" ?ጄ) | |
1779 | ("\\jG" ?ጅ) | |
1780 | ("\\joG" ?ጆ) | |
1781 | ("\\jWaG" ?ጇ) | |
1782 | ("\\geG" ?ገ) | |
1783 | ("\\guG" ?ጉ) | |
1784 | ("\\giG" ?ጊ) | |
1785 | ("\\gaG" ?ጋ) | |
1786 | ("\\gEG" ?ጌ) | |
1787 | ("\\gG" ?ግ) | |
1788 | ("\\goG" ?ጎ) | |
1789 | ;; reserved | |
1790 | ||
1791 | ("\\gWeG" ?ጐ) ; U+1310 .. | |
1792 | ;; reserved | |
1793 | ("\\gWiG" ?ጒ) | |
1794 | ("\\gWaG" ?ጓ) | |
1795 | ("\\gWEG" ?ጔ) | |
1796 | ("\\gWG" ?ጕ) | |
1797 | ;; reserved | |
1798 | ;; reserved | |
1799 | ("\\GeG" ?ጘ) | |
1800 | ("\\GuG" ?ጙ) | |
1801 | ("\\GiG" ?ጚ) | |
1802 | ("\\GaG" ?ጛ) | |
1803 | ("\\GEG" ?ጜ) | |
1804 | ("\\GG" ?ጝ) | |
1805 | ("\\GoG" ?ጞ) | |
1806 | ;; reserved | |
1807 | ||
1808 | ("\\TeG" ?ጠ) ; U+1320 .. | |
1809 | ("\\TuG" ?ጡ) | |
1810 | ("\\TiG" ?ጢ) | |
1811 | ("\\TaG" ?ጣ) | |
1812 | ("\\TEG" ?ጤ) | |
1813 | ("\\TG" ?ጥ) | |
1814 | ("\\ToG" ?ጦ) | |
1815 | ("\\TWaG" ?ጧ) | |
1816 | ("\\CeG" ?ጨ) | |
1817 | ("\\CuG" ?ጩ) | |
1818 | ("\\CiG" ?ጪ) | |
1819 | ("\\CaG" ?ጫ) | |
1820 | ("\\CEG" ?ጬ) | |
1821 | ("\\CG" ?ጭ) | |
1822 | ("\\CoG" ?ጮ) | |
1823 | ("\\CWaG" ?ጯ) | |
1824 | ||
1825 | ("\\PeG" ?ጰ) ; U+1330 .. | |
1826 | ("\\PuG" ?ጱ) | |
1827 | ("\\PiG" ?ጲ) | |
1828 | ("\\PaG" ?ጳ) | |
1829 | ("\\PEG" ?ጴ) | |
1830 | ("\\PG" ?ጵ) | |
1831 | ("\\PoG" ?ጶ) | |
1832 | ("\\PWaG" ?ጷ) | |
1833 | ("\\SeG" ?ጸ) | |
1834 | ("\\SuG" ?ጹ) | |
1835 | ("\\SiG" ?ጺ) | |
1836 | ("\\SaG" ?ጻ) | |
1837 | ("\\SEG" ?ጼ) | |
1838 | ("\\SG" ?ጽ) | |
1839 | ("\\SoG" ?ጾ) | |
1840 | ("\\SWaG" ?ጿ) | |
1841 | ||
1842 | ("\\SSeG" ?ፀ) ; U+1340 .. | |
1843 | ("\\SSuG" ?ፁ) | |
1844 | ("\\SSiG" ?ፂ) | |
1845 | ("\\SSaG" ?ፃ) | |
1846 | ("\\SSEG" ?ፄ) | |
1847 | ("\\SSG" ?ፅ) | |
1848 | ("\\SSoG" ?ፆ) | |
1849 | ;; reserved | |
1850 | ("\\feG" ?ፈ) | |
1851 | ("\\fuG" ?ፉ) | |
1852 | ("\\fiG" ?ፊ) | |
1853 | ("\\faG" ?ፋ) | |
1854 | ("\\fEG" ?ፌ) | |
1855 | ("\\fG" ?ፍ) | |
1856 | ("\\foG" ?ፎ) | |
1857 | ("\\fWaG" ?ፏ) | |
1858 | ||
1859 | ("\\peG" ?ፐ) ; U+1350 .. | |
1860 | ("\\puG" ?ፑ) | |
1861 | ("\\piG" ?ፒ) | |
1862 | ("\\paG" ?ፓ) | |
1863 | ("\\pEG" ?ፔ) | |
1864 | ("\\pG" ?ፕ) | |
1865 | ("\\poG" ?ፖ) | |
1866 | ("\\pWaG" ?ፗ) | |
1867 | ("\\mYaG" ?ፘ) | |
1868 | ("\\rYaG" ?ፙ) | |
1869 | ("\\fYaG" ?ፚ) | |
1870 | ;; reserved | |
1871 | ;; reserved | |
1872 | ;; reserved | |
1873 | ;; reserved | |
1874 | ;; reserved | |
1875 | ||
1876 | ;; reserved ; U+1360 .. | |
1877 | ("\\spaceG" ?፡) | |
1878 | ("\\periodG" ?።) | |
1879 | ("\\commaG" ?፣) | |
1880 | ("\\semicolonG" ?፤) | |
1881 | ("\\colonG" ?፥) | |
1882 | ("\\precolonG" ?፦) | |
1883 | ("\\oldqmarkG" ?፧) | |
1884 | ("\\pbreakG" ?፨) | |
1885 | ("\\andG" ?፩) | |
1886 | ("\\huletG" ?፪) | |
1887 | ("\\sostG" ?፫) | |
1888 | ("\\aratG" ?፬) | |
1889 | ("\\amstG" ?፭) | |
1890 | ("\\sadstG" ?፮) | |
1891 | ("\\sabatG" ?፯) | |
1892 | ||
1893 | ("\\smntG" ?፰) ; U+1370 .. | |
1894 | ("\\zeteNG" ?፱) | |
1895 | ("\\asrG" ?፲) | |
1896 | ("\\heyaG" ?፳) | |
1897 | ("\\selasaG" ?፴) | |
1898 | ("\\arbaG" ?፵) | |
1899 | ("\\hemsaG" ?፶) | |
1900 | ("\\slsaG" ?፷) | |
1901 | ("\\sebaG" ?፸) | |
1902 | ("\\semanyaG" ?፹) | |
1903 | ("\\zeTanaG" ?፺) | |
1904 | ("\\metoG" ?፻) | |
1905 | ("\\asrxiG" ?፼) | |
1906 | ;; reserved | |
1907 | ;; reserved | |
1908 | ;; reserved | |
1909 | ||
1910 | ;; | |
1911 | ;; private extension | |
1912 | ;; | |
1913 | ||
1914 | ("\\yWaG" ?) ; U+1A00EF (was U+12EF) | |
1915 | ||
1916 | ("\\GWaG" ?) ; U+1A011F (was U+131F) | |
1917 | ||
1918 | ("\\qqeG" ?) ; U+1A0180 .. (was U+1380 ..) | |
1919 | ("\\qquG" ?) | |
1920 | ("\\qqiG" ?) | |
1921 | ("\\qqaG" ?) | |
1922 | ("\\qqEG" ?) | |
1923 | ("\\qqG" ?) | |
1924 | ("\\qqoG" ?) | |
1925 | ;; unused | |
1926 | ("\\MWeG" ?) | |
1927 | ("\\bWeG" ?) | |
1928 | ("\\GWeG" ?) | |
1929 | ("\\fWeG" ?) | |
1930 | ("\\pWeG" ?) | |
1931 | ;; unused | |
1932 | ;; unused | |
1933 | ;; unused | |
1934 | ||
1935 | ("\\kkeG" ?) ; U+1A0190 .. (was U+1390 ..) | |
1936 | ("\\kkuG" ?) | |
1937 | ("\\kkiG" ?) | |
1938 | ("\\kkaG" ?) | |
1939 | ("\\kkEG" ?) | |
1940 | ("\\kkG" ?) | |
1941 | ("\\kkoG" ?) | |
1942 | ;; unused | |
1943 | ("\\mWiG" ?) | |
1944 | ("\\bWiG" ?) | |
1945 | ("\\GWiG" ?) | |
1946 | ("\\fWiG" ?) | |
1947 | ("\\pWiG" ?) | |
1948 | ;; unused | |
1949 | ;; unused | |
1950 | ;; unused | |
1951 | ||
1952 | ("\\XeG" ?) ; U+1A01A0 .. (was U+13A0 ..) | |
1953 | ("\\XuG" ?) | |
1954 | ("\\XiG" ?) | |
1955 | ("\\XaG" ?) | |
1956 | ("\\XEG" ?) | |
1957 | ("\\XG" ?) | |
1958 | ("\\XoG" ?) | |
1959 | ;; unused | |
1960 | ("\\mWEG" ?) | |
1961 | ("\\bWEG" ?) | |
1962 | ("\\GWEG" ?) | |
1963 | ("\\fWEG" ?) | |
1964 | ("\\pWEG" ?) | |
1965 | ;; unused | |
1966 | ;; unused | |
1967 | ;; unused | |
1968 | ||
1969 | ("\\ggeG" ?) ; U+1A01B0 .. (was U+13B0 ..) | |
1970 | ("\\gguG" ?) | |
1971 | ("\\ggiG" ?) | |
1972 | ("\\ggaG" ?) | |
1973 | ("\\ggEG" ?) | |
1974 | ("\\ggG" ?) | |
1975 | ("\\ggoG" ?) | |
1976 | ;; unused | |
1977 | ("\\mWG" ?) | |
1978 | ("\\bWG" ?) | |
1979 | ("\\GWG" ?) | |
1980 | ("\\fWG" ?) | |
1981 | ("\\pWG" ?) | |
1982 | ;; unused | |
1983 | ;; unused | |
1984 | ;; unused | |
1985 | ||
1986 | ("\\ornamentG" ?) ; U+1A01C0 .. (was U+FDF0 ..) | |
1987 | ("\\flandG" ?) | |
1988 | ("\\iflandG" ?) | |
1989 | ("\\africaG" ?) | |
1990 | ("\\iafricaG" ?) | |
1991 | ("\\wWeG" ?) | |
1992 | ("\\wWiG" ?) | |
1993 | ("\\wWaG" ?) | |
1994 | ("\\wWEG" ?) | |
1995 | ("\\wWG" ?) | |
1996 | ;; Gemination () is handled in a special way. | |
1997 | ("\\slaqG" ?) | |
1998 | ||
1999 | ;; Assign reverse conversion to Fidel chars. | |
2000 | ;; Then override forward conversion with ASCII chars. | |
2001 | ;; ASCII chars should not have reverse conversions. | |
2002 | ("\\dotG" ?) ("\\dotG" ".") | |
2003 | ("\\lquoteG" ?) ("\\lquoteG" "«") | |
2004 | ("\\rquoteG" ?) ("\\rquoteG" "»") | |
2005 | ("\\qmarkG" ?) ("\\qmarkG" "?") | |
3a549e1c KH |
2006 | |
2007 | ;; | |
2008 | ;; New characters in Unicode 4.1. | |
2009 | ;; | |
2010 | ;; In forward conversion, these characters override the old private | |
2011 | ;; extensions above. The old private extensions still keep their | |
2012 | ;; reverse conversion. | |
2013 | ;; | |
2014 | ||
2015 | ("\\ornamentG" ?፠) | |
2016 | ("\\yWaG" ?ዯ) | |
2017 | ("\\GWaG" ?ጟ) | |
2018 | ("\\MWeG" ?ᎀ) | |
2019 | ("\\mWiG" ?ᎁ) | |
2020 | ("\\mWEG" ?ᎂ) | |
2021 | ("\\mWG" ?ᎃ) | |
2022 | ("\\bWeG" ?ᎄ) | |
2023 | ("\\bWiG" ?ᎅ) | |
2024 | ("\\bWEG" ?ᎆ) | |
2025 | ("\\bWG" ?ᎇ) | |
2026 | ("\\fWeG" ?ᎈ) | |
2027 | ("\\fWiG" ?ᎉ) | |
2028 | ("\\fWEG" ?ᎊ) | |
2029 | ("\\fWG" ?ᎋ) | |
2030 | ("\\pWeG" ?ᎌ) | |
2031 | ("\\pWiG" ?ᎍ) | |
2032 | ("\\pWEG" ?ᎎ) | |
2033 | ("\\pWG" ?ᎏ) | |
2034 | ("\\GWeG" ?ⶓ) | |
2035 | ("\\GWiG" ?ⶔ) | |
2036 | ("\\GWEG" ?ⶕ) | |
2037 | ("\\GWG" ?ⶖ) | |
2038 | ("\\qqeG" ?ⷀ) | |
2039 | ("\\qquG" ?ⷁ) | |
2040 | ("\\qqiG" ?ⷂ) | |
2041 | ("\\qqaG" ?ⷃ) | |
2042 | ("\\qqEG" ?ⷄ) | |
2043 | ("\\qqG" ?ⷅ) | |
2044 | ("\\qqoG" ?ⷆ) | |
2045 | ("\\kkeG" ?ⷈ) | |
2046 | ("\\kkuG" ?ⷉ) | |
2047 | ("\\kkiG" ?ⷊ) | |
2048 | ("\\kkaG" ?ⷋ) | |
2049 | ("\\kkEG" ?ⷌ) | |
2050 | ("\\kkG" ?ⷍ) | |
2051 | ("\\kkoG" ?ⷎ) | |
2052 | ("\\XeG" ?ⷐ) | |
2053 | ("\\XuG" ?ⷑ) | |
2054 | ("\\XiG" ?ⷒ) | |
2055 | ("\\XaG" ?ⷓ) | |
2056 | ("\\XEG" ?ⷔ) | |
2057 | ("\\XG" ?ⷕ) | |
2058 | ("\\XoG" ?ⷖ) | |
2059 | ("\\ggeG" ?ⷘ) | |
2060 | ("\\gguG" ?ⷙ) | |
2061 | ("\\ggiG" ?ⷚ) | |
2062 | ("\\ggaG" ?ⷛ) | |
2063 | ("\\ggEG" ?ⷜ) | |
2064 | ("\\ggG" ?ⷝ) | |
2065 | ("\\ggoG" ?ⷞ) | |
9017ac97 KH |
2066 | ) |
2067 | ||
2068 | ;; The ethiopic-tex package is not used for keyboard input, therefore | |
2069 | ;; not registered with the register-input-method function. | |
60acfd15 | 2070 | |
a69ed912 | 2071 | (provide 'ethio-util) |
4ed46869 | 2072 | |
9017ac97 KH |
2073 | ;;; ethio-util.el ends here |
2074 | ||
4ed46869 | 2075 | ;;; ethio-util.el ends here |