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