(number, original-date, add-to-diary-list)
[emacs.git] / lisp / language / ethio-util.el
bloba2187bdd669aa438c602d23fb8e604ea5f9ea588
1 ;;; ethio-util.el --- utilities for Ethiopic -*- coding: utf-8; -*-
3 ;; Copyright (C) 1997, 1998, 2002, 2003, 2004, 2005, 2006, 2007, 2008
4 ;; Free Software Foundation, Inc.
5 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
6 ;; 2006, 2007, 2008
7 ;; National Institute of Advanced Industrial Science and Technology (AIST)
8 ;; Registration Number H14PRO021
9 ;; Copyright (C) 2005, 2006
10 ;; National Institute of Advanced Industrial Science and Technology (AIST)
11 ;; Registration Number: H15PRO110
13 ;; Keywords: mule, multilingual, Ethiopic
15 ;; This file is part of GNU Emacs.
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
19 ;; the Free Software Foundation; either version 3, or (at your option)
20 ;; any later version.
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.
27 ;; You should have received a copy of the GNU General Public License
28 ;; along with GNU Emacs; see the file COPYING. If not, write to the
29 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
30 ;; Boston, MA 02110-1301, USA.
32 ;; Author: TAKAHASHI Naoto <ntakahas@m17n.org>
34 ;;; Commentary:
36 ;;; Code:
38 (require 'robin)
40 (defvar rmail-current-message)
41 (defvar rmail-message-vector)
43 ;; Information for exiting Ethiopic environment.
44 (defvar exit-ethiopic-environment-data nil)
46 ;;;###autoload
47 (defun setup-ethiopic-environment-internal ()
48 (let ((key-bindings '((" " . ethio-insert-space)
49 ([?\S- ] . ethio-insert-ethio-space)
50 ;; ([?\C-'] . ethio-gemination)
51 ([f3] . ethio-fidel-to-sera-buffer)
52 ([S-f3] . ethio-fidel-to-sera-region)
53 ([C-f3] . ethio-fidel-to-sera-marker)
54 ([f4] . ethio-sera-to-fidel-buffer)
55 ([S-f4] . ethio-sera-to-fidel-region)
56 ([C-f4] . ethio-sera-to-fidel-marker)
57 ([S-f5] . ethio-toggle-punctuation)
58 ([S-f6] . ethio-modify-vowel)
59 ([S-f7] . ethio-replace-space)
60 ;; ([S-f8] . ethio-input-special-character) ; deprecated
61 ([C-f9] . ethio-toggle-space)
62 ([S-f9] . ethio-replace-space) ; as requested
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))))
73 (add-hook 'find-file-hook 'ethio-find-file)
74 (add-hook 'write-file-functions 'ethio-write-file)
75 (add-hook 'after-save-hook 'ethio-find-file))
77 (defun exit-ethiopic-environment ()
78 "Exit Ethiopic language environment."
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)))
85 (remove-hook 'find-file-hook 'ethio-find-file)
86 (remove-hook 'write-file-functions 'ethio-write-file)
87 (remove-hook 'after-save-hook 'ethio-find-file))
90 ;; ETHIOPIC UTILITY FUNCTIONS
93 ;; If the filename ends in ".sera", editing is done in fidel
94 ;; but file I/O is done in SERA.
96 ;; If the filename ends in ".java", editing is done in fidel
97 ;; but file I/O is done in the \uXXXX style, where XXXX is
98 ;; the Unicode codepoint for the Ethiopic character.
100 ;; If the filename ends in ".tex", editing is done in fidel
101 ;; but file I/O is done in EthioTeX format.
104 ;; users' preference
107 (defvar ethio-primary-language 'tigrigna
108 "*Symbol that defines the primary language in SERA --> FIDEL conversion.
109 The value should be one of: `tigrigna', `amharic' or `english'.")
111 (defvar ethio-secondary-language 'english
112 "*Symbol that defines the secondary language in SERA --> FIDEL conversion.
113 The value should be one of: `tigrigna', `amharic' or `english'.")
115 (defvar ethio-use-colon-for-colon nil
116 "*Non-nil means associate ASCII colon with Ethiopic colon.
117 If nil, associate ASCII colon with Ethiopic word separator, i.e., two
118 vertically stacked dots. All SERA <--> FIDEL converters refer this
119 variable.")
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).
123 If nil, associate ASCII question mark with Ethiopic stylized question
124 mark. All SERA <--> FIDEL converters refer this variable.")
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.
128 If nil, put an apostrophe only between a 6th-form consonant and an
129 isolated vowel.")
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.")
134 (defvar ethio-numeric-reduction 0
135 "*Degree of reduction in converting Ethiopic digits into Arabic digits.
136 Should be 0, 1 or 2.
137 For 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.")
142 (defvar ethio-java-save-lowercase nil
143 "*Non-nil means save Ethiopic characters in lowercase hex numbers to Java files.
144 If nil, use uppercases.")
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))))
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" "ኣ")))
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" "-:" ?፥)))
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" "`?" ?፧)))
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))
185 (add-hook 'robin-activate-hook 'ethio-adjust-robin)
188 ;; SERA to FIDEL
191 ;;;###autoload
192 (defun ethio-sera-to-fidel-buffer (&optional secondary force)
193 "Convert the current buffer from SERA to FIDEL.
195 The variable `ethio-primary-language' specifies the primary
196 language and `ethio-secondary-language' specifies the secondary.
198 If the 1st optional argument SECONDARY is non-nil, assume the
199 buffer begins with the secondary language; otherwise with the
200 primary language.
202 If the 2nd optional argument FORCE is non-nil, perform conversion
203 even if the buffer is read-only.
205 See also the descriptions of the variables
206 `ethio-use-colon-for-colon' and `ethio-use-three-dot-question'."
208 (interactive "P")
209 (ethio-sera-to-fidel-region (point-min) (point-max) secondary force))
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)
216 ;;;###autoload
217 (defun ethio-sera-to-fidel-region (begin end &optional secondary force)
218 "Convert the characters in region from SERA to FIDEL.
220 The variable `ethio-primary-language' specifies the primary
221 language and `ethio-secondary-language' specifies the secondary.
223 If the 3rd argument SECONDARY is given and non-nil, assume the
224 region begins with the secondary language; otherwise with the
225 primary language.
227 If the 4th argument FORCE is given and non-nil, perform
228 conversion even if the buffer is read-only.
230 See also the descriptions of the variables
231 `ethio-use-colon-for-colon' and `ethio-use-three-dot-question'."
233 (interactive "r\nP")
234 (if (and buffer-read-only
235 (not force)
236 (not (y-or-n-p "Buffer is read-only. Force to convert? ")))
237 (error ""))
239 (let ((ethio-primary-language ethio-primary-language)
240 (ethio-secondary-language ethio-secondary-language)
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.
245 (buffer-read-only nil)
246 (lang (if secondary ethio-secondary-language ethio-primary-language))
247 ret)
249 (ethio-use-colon-for-colon ethio-use-colon-for-colon)
250 (ethio-use-three-dot-question ethio-use-three-dot-question)
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))
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)))))
273 ;; Restore user's preference.
274 (ethio-adjust-robin))
276 (defun ethio-sera-to-fidel-region-noethio ()
277 "Return next language as symbol: amharic, tigrigna, toggle or nil."
278 (let (lflag)
279 (cond
281 ;; No more "\", i.e. nothing to do.
282 ((not (search-forward "\\" nil 0))
283 nil)
285 ;; Hereafter point is put after a "\".
286 ;; First delete that "\", then check the following chars.
288 ;; A language flag.
289 ((progn (delete-char -1) (setq lflag (ethio-process-language-flag)))
290 lflag)
292 ;; "\\" : leave the second "\" and continue in the same language.
293 ((= (following-char) ?\\)
294 (forward-char 1)
295 nil)
297 ;; "\ " : delete the following " " and toggle the language.
298 ((= (following-char) 32)
299 (delete-char 1)
300 'toggle)
302 ;; A "\" but not a special sequence: simply toggle the language.
304 'toggle))))
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)))
317 (let (lflag)
318 (cond
319 ((= (following-char) ?`)
320 (delete-char 1)
321 (ethio-process-digits)
322 lang)
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)
330 (forward-char 1))
331 lang)
333 ((eobp)
334 nil)
336 ;; Now we must be looking at a "\".
337 ;; First delete that "\", then check the following chars.
339 ((progn (delete-char 1) (= (following-char) 32))
340 (delete-char 1)
341 'toggle)
343 ((looking-at "[,.;:'`?\\]+")
344 (goto-char (match-end 0))
345 lang)
347 ((/= (following-char) ?~)
348 'toggle)
350 ;; Now we must be looking at a "~".
352 ((setq lflag (ethio-process-language-flag))
353 lflag)
355 ;; Delete the following "~" and check the following chars.
357 ((progn (delete-char 1) (looking-at "! ?"))
358 (replace-match "")
359 (if (re-search-forward "\\\\~! ?" nil 0)
360 (replace-match ""))
361 lang)
363 ((looking-at "-: ?")
364 (replace-match "")
365 (ethio-use-colon-for-colon t)
366 lang)
368 ((looking-at "`: ?")
369 (replace-match "")
370 (ethio-use-colon-for-colon nil)
371 lang)
373 ((looking-at "`| ?")
374 (replace-match "")
375 (ethio-use-three-dot-question t)
376 lang)
378 ((looking-at "\\? ?")
379 (replace-match "")
380 (ethio-use-three-dot-question nil)
381 lang)
383 ;; Unknown tilde escape. Recover the deleted chars.
385 (insert "\\~")
386 lang))))
388 (defun ethio-process-language-flag nil
389 "Process a language flag of the form \"~lang\" or \"~lang1~lang2\".
391 If looking at \"~lang1~lang2\", set `ethio-primary-language' and
392 `ethio-secondary-language' based on \"lang1\" and \"lang2\".
393 Then delete the language flag \"~lang1~lang2\" from the buffer.
394 Return value is the new primary language.
396 If looking at \"~lang\", delete that language flag \"~lang\" from
397 the buffer and return that language. In this case
398 `ethio-primary-language' and `ethio-secondary-language' are left
399 unchanged.
401 If an unsupported language flag is found, just return nil without
402 changing anything."
404 (let (lang1 lang2)
405 (cond
407 ;; ~lang1~lang2
408 ((and (looking-at
409 "~\\([a-z][a-z][a-z]?\\)~\\([a-z][a-z][a-z]?\\)[ \t\n\\]")
410 (setq lang1 (ethio-flag-to-language (match-string 1)))
411 (setq lang2 (ethio-flag-to-language (match-string 2))))
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)
419 ;; ~lang
420 ((and (looking-at "~\\([a-z][a-z][a-z]?\\)[ \t\n\\]")
421 (setq lang1 (ethio-flag-to-language (match-string 1))))
422 (delete-region (point) (match-end 1))
423 (if (= (following-char) 32)
424 (delete-char 1))
425 lang1)
427 ;; otherwise
429 nil))))
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)))
438 (defun ethio-process-digits nil
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)
445 ;; count up following zeros
446 (setq z 0)
447 (while (= (following-char) ?0)
448 (delete-char 1)
449 (setq z (1+ z)))
451 (cond
453 ;; first digit is 10, 20, ..., or 90
454 ((= (mod z 2) 1)
455 (insert (aref [?፲ ?፳ ?፴ ?፵ ?፶ ?፷ ?፸ ?፹ ?፺] (- ch ?1)))
456 (setq z (1- z)))
458 ;; first digit is 2, 3, ..., or 9
459 ((/= ch ?1)
460 (insert (aref [?፪ ?፫ ?፬ ?፭ ?፮ ?፯ ?፰ ?፱] (- ch ?2))))
462 ;; single 1
463 ((= z 0)
464 (insert "፩")))
466 ;; 100
467 (if (= (mod z 4) 2)
468 (insert "፻"))
470 ;; 10000
471 (insert-char ?፼ (/ z 4)))))
473 ;;;###autoload
474 (defun ethio-sera-to-fidel-marker (&optional force)
475 "Convert the regions surrounded by \"<sera>\" and \"</sera>\" from SERA to FIDEL.
476 Assume that each region begins with `ethio-primary-language'.
477 The markers \"<sera>\" and \"</sera>\" themselves are not deleted."
478 (interactive "P")
479 (if (and buffer-read-only
480 (not force)
481 (not (y-or-n-p "Buffer is read-only. Force to convert? ")))
482 (error ""))
483 (save-excursion
484 (goto-char (point-min))
485 (while (search-forward "<sera>" nil t)
486 (ethio-sera-to-fidel-region
487 (point)
488 (if (search-forward "</sera>" nil t)
489 (match-beginning 0)
490 (point-max))
492 'force))))
495 ;; FIDEL to SERA
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 "")))
505 ;;;###autoload
506 (defun ethio-fidel-to-sera-buffer (&optional secondary force)
507 "Replace all the FIDEL characters in the current buffer to the SERA format.
508 The variable `ethio-primary-language' specifies the primary
509 language and `ethio-secondary-language' specifies the secondary.
511 If the 1st optional argument SECONDARY is non-nil, try to convert the
512 region so that it begins with the secondary language; otherwise with the
513 primary language.
515 If the 2nd optional argument FORCE is non-nil, convert even if the
516 buffer is read-only.
518 See also the descriptions of the variables
519 `ethio-use-colon-for-colon', `ethio-use-three-dot-question',
520 `ethio-quote-vowel-always' and `ethio-numeric-reduction'."
522 (interactive "P")
523 (ethio-fidel-to-sera-region (point-min) (point-max) secondary force))
525 ;;;###autoload
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.
529 The variable `ethio-primary-language' specifies the primary
530 language and `ethio-secondary-language' specifies the secondary.
532 If the 3rd argument SECONDARY is given and non-nil, convert
533 the region so that it begins with the secondary language; otherwise with
534 the primary language.
536 If the 4th argument FORCE is given and non-nil, convert even if the
537 buffer is read-only.
539 See also the descriptions of the variables
540 `ethio-use-colon-for-colon', `ethio-use-three-dot-question',
541 `ethio-quote-vowel-always' and `ethio-numeric-reduction'."
543 (interactive "r\nP")
544 (if (and buffer-read-only
545 (not force)
546 (not (y-or-n-p "Buffer is read-only. Force to convert? ")))
547 (error ""))
549 (save-restriction
550 (narrow-to-region begin end)
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)
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))
569 (while (not (eobp))
571 (if (eq mode 'english)
572 (progn
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")
580 (insert flag)
581 (setq mode 'ethiopic))))
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")
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))))
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")))
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")))
622 (goto-char (point-max)))
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)))))))))
643 ;;;###autoload
644 (defun ethio-fidel-to-sera-marker (&optional force)
645 "Convert the regions surrounded by \"<sera>\" and \"</sera>\" from FIDEL to SERA.
646 The markers \"<sera>\" and \"</sera>\" themselves are not deleted."
648 (interactive "P")
649 (if (and buffer-read-only
650 (not force)
651 (not (y-or-n-p "Buffer is read-only. Force to convert? ")))
652 (error ""))
653 (save-excursion
654 (goto-char (point-min))
655 (while (search-forward "<sera>" nil t)
656 (ethio-fidel-to-sera-region
657 (point)
658 (if (search-forward "</sera>" nil t)
659 (match-beginning 0)
660 (point-max))
662 'force))))
665 ;; vowel modification
668 ;;;###autoload
669 (defun ethio-modify-vowel nil
670 "Modify the vowel of the FIDEL that is under the cursor."
671 (interactive)
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: "))
678 (delete-char 1)
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"))))))
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)))))))
699 ;; space replacement
702 ;;;###autoload
703 (defun ethio-replace-space (ch begin end)
704 "Replace ASCII spaces with Ethiopic word separators in the region.
706 In the specified region, replace word separators surrounded by two
707 Ethiopic characters, depending on the first argument CH, which should
708 be 1, 2, or 3.
710 If CH = 1, word separator will be replaced with an ASCII space.
711 If CH = 2, with two ASCII spaces.
712 If CH = 3, with the Ethiopic colon-like word separator.
714 The 2nd and 3rd arguments BEGIN and END specify the region."
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)
723 (cond
724 ((= ch ?1)
725 ;; an Ethiopic word separator --> an ASCII space
726 (goto-char (point-min))
727 (while (search-forward "፡" nil t)
728 (replace-match " "))
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")
734 (forward-char -1)))
736 ((= ch ?2)
737 ;; An Ethiopic word separator --> two ASCII spaces
738 (goto-char (point-min))
739 (while (search-forward "፡" nil t)
740 (replace-match " "))
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")
746 (forward-char -1)))
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)
753 (replace-match "\\1፡\\2")
754 (forward-char -1))
756 ;; Three or more ASCII spaces between Ethiopic characters
757 ;; --> An Ethiopic word separator + (N - 2) ASCII spaces
758 (goto-char (point-min))
759 (while (re-search-forward "\\(\\ce\\) \\( +\\ce\\)" nil t)
760 (replace-match "\\1፡\\2")
761 (forward-char -1)))))))
764 ;; special icons
767 ;; This function is deprecated.
768 ;;;###autoload
769 (defun ethio-input-special-character (arg)
770 "This function is deprecated."
771 (interactive "*cInput number: 1. 2. 3. 4. 5.")
772 (cond
773 ((= arg ?1)
774 (insert ""))
775 ((= arg ?2)
776 (insert ""))
777 ((= arg ?3)
778 (insert ""))
779 ((= arg ?4)
780 (insert ""))
781 ((= arg ?5)
782 (insert ""))
784 (error ""))))
787 ;; TeX support
790 ;;;###autoload
791 (defun ethio-fidel-to-tex-buffer nil
792 "Convert each fidel characters in the current buffer into a fidel-tex command."
793 (interactive)
794 (let ((buffer-read-only nil)
795 comp ch)
797 ;; Special treatment for geminated characters.
798 ;; Geminated characters la", etc. change into \geminateG{\laG}, etc.
799 (goto-char (point-min))
800 (while (re-search-forward "፟\\|" nil t)
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 "}")))
811 ;; Special Ethiopic punctuations.
812 (goto-char (point-min))
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"))
825 (forward-char -1)
826 (delete-char -1)
827 (insert "\\lquoteG")
828 (forward-char 1))))
830 ;; Ethiopic characters to TeX macros
831 (robin-invert-region (point-min) (point-max) "ethiopic-tex")
833 (goto-char (point-min))
834 (set-buffer-modified-p nil)))
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))
843 ;; TeX macros to Ethiopic characters
844 (robin-convert-region (point-min) (point-max) "ethiopic-tex")
846 ;; compose geminated characters
847 (goto-char (point-min))
848 (while (re-search-forward "\\\\geminateG{\\(\\ce?\\)}" nil t)
849 (replace-match "\\1፟"))
851 ;; remove redundant braces, if any
852 (goto-char (point-min))
853 (while (re-search-forward "{\\(\\ce\\)}" nil t)
854 (replace-match "\\1"))
856 (goto-char (point-min))
857 (set-buffer-modified-p nil)))
860 ;; Java support
863 ;;;###autoload
864 (defun ethio-fidel-to-java-buffer nil
865 "Convert Ethiopic characters into the Java escape sequences.
867 Each escape sequence is of the form \\uXXXX, where XXXX is the
868 character's codepoint (in hex) in Unicode.
870 If `ethio-java-save-lowercase' is non-nil, use [0-9a-f].
871 Otherwise, [0-9A-F]."
872 (let ((ucode))
874 (goto-char (point-min))
875 (while (re-search-forward "[ሀ-፼]" nil t)
876 (setq ucode (preceding-char))
877 (delete-backward-char 1)
878 (insert
879 (format (if ethio-java-save-lowercase "\\u%4x" "\\u%4X")
880 ucode)))))
882 ;;;###autoload
883 (defun ethio-java-to-fidel-buffer nil
884 "Convert the Java escape sequences into corresponding Ethiopic characters."
885 (let ((case-fold-search t)
886 (ucode))
887 (goto-char (point-min))
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))))))
894 ;; file I/O hooks
897 ;;;###autoload
898 (defun ethio-find-file nil
899 "Transliterate file content into Ethiopic dependig on filename suffix."
900 (cond
902 ((string-match "\\.sera$" (buffer-file-name))
903 (save-excursion
904 (ethio-sera-to-fidel-buffer nil 'force)
905 (set-buffer-modified-p nil)))
907 ((string-match "\\.html$" (buffer-file-name))
908 (let ((ethio-sera-being-called-by-w3 t))
909 (save-excursion
910 (ethio-sera-to-fidel-marker 'force)
911 (goto-char (point-min))
912 (while (re-search-forward "&[lr]aquo;" nil t)
913 (if (= (char-after (1+ (match-beginning 0))) ?l)
914 (replace-match "«")
915 (replace-match "»")))
916 (set-buffer-modified-p nil))))
918 ((string-match "\\.tex$" (buffer-file-name))
919 (save-excursion
920 (ethio-tex-to-fidel-buffer)
921 (set-buffer-modified-p nil)))
923 ((string-match "\\.java$" (buffer-file-name))
924 (save-excursion
925 (ethio-java-to-fidel-buffer)
926 (set-buffer-modified-p nil)))
929 nil)))
931 ;;;###autoload
932 (defun ethio-write-file nil
933 "Transliterate Ethiopic characters in ASCII depending on the file extension."
934 (cond
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)))
943 ((string-match "\\.html$" (buffer-file-name))
944 (save-excursion
945 (let ((ethio-sera-being-called-by-w3 t))
946 (ethio-fidel-to-sera-marker 'force)
947 (goto-char (point-min))
948 (while (re-search-forward "[«»]" nil t)
949 (replace-match (if (= (preceding-char) ?«) "&laquo;" "&raquo;")))
950 (goto-char (point-min))
951 (if (search-forward "<sera>" nil t)
952 (ethio-record-user-preference))
953 (set-buffer-modified-p nil))))
955 ((string-match "\\.tex$" (buffer-file-name))
956 (save-excursion
957 (ethio-fidel-to-tex-buffer)
958 (set-buffer-modified-p nil)))
960 ((string-match "\\.java$" (buffer-file-name))
961 (save-excursion
962 (ethio-fidel-to-java-buffer)
963 (set-buffer-modified-p nil)))
966 nil)))
968 (defun ethio-record-user-preference nil
969 (insert (if ethio-use-colon-for-colon "\\~-: " "\\~`: ")
970 (if ethio-use-three-dot-question "\\~`| " "\\~? ")))
973 ;; Ethiopic word separator vs. ASCII space
976 (defvar ethio-prefer-ascii-space t)
977 (make-variable-buffer-local 'ethio-prefer-ascii-space)
979 (defun ethio-toggle-space nil
980 "Toggle ASCII space and Ethiopic separator for keyboard input."
981 (interactive)
982 (setq ethio-prefer-ascii-space
983 (not ethio-prefer-ascii-space)))
985 (defun ethio-insert-space (arg)
986 "Insert ASCII spaces or Ethiopic word separators depending on context.
988 If the current word separator (indicated in mode-line) is the ASCII space,
989 insert an ASCII space. With ARG, insert that many ASCII spaces.
991 If the current word separator is the colon-like Ethiopic word
992 separator and the point is preceded by `an Ethiopic punctuation mark
993 followed by zero or more ASCII spaces', then insert also an ASCII
994 space. With ARG, insert that many ASCII spaces.
996 Otherwise, insert a colon-like Ethiopic word separator. With ARG, insert that
997 many Ethiopic word separators."
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)
1006 '(?፡ ?። ?፣ ?፤ ?፥ ?፦ ?፧ ?፨ ? ? ? ? ?)))
1007 (insert-char 32 arg))
1009 (insert-char ?፡ arg))))
1011 ;;;###autoload
1012 (defun ethio-insert-ethio-space (arg)
1013 "Insert the Ethiopic word delimiter (the colon-like character).
1014 With ARG, insert that many delimiters."
1015 (interactive "*p")
1016 (insert-char ?፡ arg))
1019 ;; Gemination
1022 ;;;###autoload
1023 (defun ethio-composition-function (pos to font-object string)
1024 (setq pos (1- pos))
1025 (let ((pattern "\\ce\\(፟\\|\\)"))
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)))))))))
1038 ;; This function is not used any more.
1039 (defun ethio-gemination nil
1040 "Compose the character before the point with the Ethiopic gemination mark.
1041 If the character is already composed, decompose it and remove the gemination
1042 mark."
1043 (interactive "*")
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)))
1052 (error "")))))
1055 ;;; Robin packages
1058 (robin-define-package "ethiopic-sera"
1059 "SERA transliteration system for Ethiopic."
1061 ("he" ?ሀ)
1062 ("hu" ?ሁ)
1063 ("hi" ?ሂ)
1064 ("ha" ?ሃ)
1065 ("hE" ?ሄ) ("hee" "ሄ")
1066 ("h" ?ህ)
1067 ("ho" ?ሆ)
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" "ሏ")
1078 ("He" ?ሐ)
1079 ("Hu" ?ሑ)
1080 ("Hi" ?ሒ)
1081 ("Ha" ?ሓ)
1082 ("HE" ?ሔ) ("Hee" "ሔ")
1083 ("H" ?ሕ)
1084 ("Ho" ?ሖ)
1085 ("HWa" ?ሗ) ("HW" "ሗ")
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" "ሟ")
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" "ሧ")
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" "ሯ")
1116 ("se" ?ሰ)
1117 ("su" ?ሱ)
1118 ("si" ?ሲ)
1119 ("sa" ?ሳ)
1120 ("sE" ?ሴ) ("see" "ሴ")
1121 ("s" ?ስ)
1122 ("so" ?ሶ)
1123 ("sWa" ?ሷ) ("sW" "ሷ")
1125 ("xe" ?ሸ)
1126 ("xu" ?ሹ)
1127 ("xi" ?ሺ)
1128 ("xa" ?ሻ)
1129 ("xE" ?ሼ) ("xee" "ሼ")
1130 ("x" ?ሽ)
1131 ("xo" ?ሾ)
1132 ("xWa" ?ሿ) ("xW" "ሿ")
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" "ቍ")
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" "ቝ")
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" "ቧ")
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" "ቯ")
1178 ("te" ?ተ)
1179 ("tu" ?ቱ)
1180 ("ti" ?ቲ)
1181 ("ta" ?ታ)
1182 ("tE" ?ቴ) ("tee" "ቴ")
1183 ("t" ?ት)
1184 ("to" ?ቶ)
1185 ("tWa" ?ቷ) ("tW" "ቷ")
1187 ("ce" ?ቸ)
1188 ("cu" ?ቹ)
1189 ("ci" ?ቺ)
1190 ("ca" ?ቻ)
1191 ("cE" ?ቼ) ("cee" "ቼ")
1192 ("c" ?ች)
1193 ("co" ?ቾ)
1194 ("cWa" ?ቿ) ("cW" "ቿ")
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" "ኍ")
1213 ("ne" ?ነ)
1214 ("nu" ?ኑ)
1215 ("ni" ?ኒ)
1216 ("na" ?ና)
1217 ("nE" ?ኔ) ("nee" "ኔ")
1218 ("n" ?ን)
1219 ("no" ?ኖ)
1220 ("nWa" ?ኗ) ("nW" "ኗ")
1222 ("Ne" ?ኘ)
1223 ("Nu" ?ኙ)
1224 ("Ni" ?ኚ)
1225 ("Na" ?ኛ)
1226 ("NE" ?ኜ) ("Nee" "ኜ")
1227 ("N" ?ኝ)
1228 ("No" ?ኞ)
1229 ("NWa" ?ኟ) ("NW" "ኟ")
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" "ኧ")
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" "ኵ")
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" "ዅ")
1266 ("we" ?ወ)
1267 ("wu" ?ዉ)
1268 ("wi" ?ዊ)
1269 ("wa" ?ዋ)
1270 ("wE" ?ዌ) ("wee" "ዌ")
1271 ("w" ?ው)
1272 ("wo" ?ዎ)
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" "ዖ")
1282 ("ze" ?ዘ)
1283 ("zu" ?ዙ)
1284 ("zi" ?ዚ)
1285 ("za" ?ዛ)
1286 ("zE" ?ዜ) ("zee" "ዜ")
1287 ("z" ?ዝ)
1288 ("zo" ?ዞ)
1289 ("zWa" ?ዟ) ("zW" "ዟ")
1291 ("Ze" ?ዠ)
1292 ("Zu" ?ዡ)
1293 ("Zi" ?ዢ)
1294 ("Za" ?ዣ)
1295 ("ZE" ?ዤ) ("Zee" "ዤ")
1296 ("Z" ?ዥ)
1297 ("Zo" ?ዦ)
1298 ("ZWa" ?ዧ) ("ZW" "ዧ")
1300 ("ye" ?የ) ("Ye" "የ")
1301 ("yu" ?ዩ) ("Yu" "ዩ")
1302 ("yi" ?ዪ) ("Yi" "ዪ")
1303 ("ya" ?ያ) ("Ya" "ያ")
1304 ("yE" ?ዬ) ("YE" "ዬ") ("yee" "ዬ") ("Yee" "ዬ")
1305 ("y" ?ይ) ("Y" "ይ")
1306 ("yo" ?ዮ) ("Yo" "ዮ")
1308 ("de" ?ደ)
1309 ("du" ?ዱ)
1310 ("di" ?ዲ)
1311 ("da" ?ዳ)
1312 ("dE" ?ዴ) ("dee" "ዴ")
1313 ("d" ?ድ)
1314 ("do" ?ዶ)
1315 ("dWa" ?ዷ) ("dW" "ዷ")
1317 ("De" ?ዸ)
1318 ("Du" ?ዹ)
1319 ("Di" ?ዺ)
1320 ("Da" ?ዻ)
1321 ("DE" ?ዼ) ("Dee" "ዼ")
1322 ("D" ?ዽ)
1323 ("Do" ?ዾ)
1324 ("DWa" ?ዿ) ("DW" "ዿ")
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" "ጇ")
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" "ጕ")
1348 ("Ge" ?ጘ)
1349 ("Gu" ?ጙ)
1350 ("Gi" ?ጚ)
1351 ("Ga" ?ጛ)
1352 ("GE" ?ጜ) ("Gee" "ጜ")
1353 ("G" ?ጝ)
1354 ("Go" ?ጞ)
1356 ("Te" ?ጠ)
1357 ("Tu" ?ጡ)
1358 ("Ti" ?ጢ)
1359 ("Ta" ?ጣ)
1360 ("TE" ?ጤ) ("Tee" "ጤ")
1361 ("T" ?ጥ)
1362 ("To" ?ጦ)
1363 ("TWa" ?ጧ) ("TW" "ጧ")
1365 ("Ce" ?ጨ)
1366 ("Cu" ?ጩ)
1367 ("Ci" ?ጪ)
1368 ("Ca" ?ጫ)
1369 ("CE" ?ጬ) ("Cee" "ጬ")
1370 ("C" ?ጭ)
1371 ("Co" ?ጮ)
1372 ("CWa" ?ጯ) ("CW" "ጯ")
1374 ("Pe" ?ጰ)
1375 ("Pu" ?ጱ)
1376 ("Pi" ?ጲ)
1377 ("Pa" ?ጳ)
1378 ("PE" ?ጴ) ("Pee" "ጴ")
1379 ("P" ?ጵ)
1380 ("Po" ?ጶ)
1381 ("PWa" ?ጷ) ("PW" "ጷ")
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" "ጿ")
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" "ፆ")
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" "ፏ")
1411 ("pe" ?ፐ)
1412 ("pu" ?ፑ)
1413 ("pi" ?ፒ)
1414 ("pa" ?ፓ)
1415 ("pE" ?ፔ) ("pee" "ፔ")
1416 ("p" ?ፕ)
1417 ("po" ?ፖ)
1418 ("pWa" ?ፗ) ("pW" "ፗ")
1420 ("rYa" ?ፘ) ("RYa" "ፘ") ("rY" "ፘ") ("RY" "ፘ")
1421 ("mYa" ?ፙ) ("MYa" "ፙ") ("mY" "ፙ") ("MY" "ፙ")
1422 ("fYa" ?ፚ) ("FYa" "ፚ") ("fY" "ፚ") ("FY" "ፚ")
1424 (" : " ?፡) (":" "፡") ("`:" "፡")
1425 ("::" ?።) ("." "።")
1426 ("," ?፣)
1427 (";" ?፤)
1428 ("-:" ?፥)
1429 (":-" ?፦)
1430 ("`?" ?፧) ("??" "፧")
1431 (":|:" ?፨) ("**" "፨")
1433 ;; Explicit syllable delimiter
1434 ("'" "")
1436 ;; Quick ASCII input
1437 ("''" "'")
1438 (":::" ":")
1439 (".." ".")
1440 (",," ",")
1441 (";;" ";")
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" ?፼)
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" "፻፼")
1501 (register-input-method
1502 "ethiopic-sera" "Ethiopic"
1503 'robin-use-package "et" "An input method for Ethiopic.")
1505 (robin-define-package "ethiopic-tex"
1506 "TeX transliteration system for Ethiopic."
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" ?ሏ)
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" ?ሟ)
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" ?ሯ)
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" ?ሿ)
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
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
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" ?ቯ)
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" ?ቿ)
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
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" ?ኟ)
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
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
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
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" ?ዟ)
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
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" ?ዿ)
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
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
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" ?ጯ)
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" ?ጿ)
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" ?ፏ)
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
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" ?፯)
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
1917 ;; private extension
1920 ("\\yWaG" ?) ; U+1A00EF (was U+12EF)
1922 ("\\GWaG" ?) ; U+1A011F (was U+131F)
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
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
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
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
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" ?)
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" "?")
2014 ;; New characters in Unicode 4.1.
2016 ;; In forward conversion, these characters override the old private
2017 ;; extensions above. The old private extensions still keep their
2018 ;; reverse conversion.
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" ?ⷞ)
2074 ;; The ethiopic-tex package is not used for keyboard input, therefore
2075 ;; not registered with the register-input-method function.
2077 (provide 'ethio-util)
2079 ;;; ethio-util.el ends here
2081 ;;; arch-tag: c8feb3d6-39bf-4b0a-b6ef-26f03fbc8140
2082 ;;; ethio-util.el ends here