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