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