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