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