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