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