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