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