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