Commit | Line | Data |
---|---|---|
985773c9 | 1 | ;;; ethio-util.el --- utilities for Ethiopic -*- coding: utf-8; -*- |
4ed46869 | 2 | |
d7a0267c | 3 | ;; Copyright (C) 1997, 1998, 2002, 2003, 2004, 2005, 2006, 2007 |
eaa61218 | 4 | ;; Free Software Foundation, Inc. |
d7a0267c | 5 | ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 |
eaa61218 KH |
6 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
7 | ;; Registration Number H14PRO021 | |
3a549e1c | 8 | ;; Copyright (C) 2005, 2006 |
9017ac97 | 9 | ;; National Institute of Advanced Industrial Science and Technology (AIST) |
3a549e1c | 10 | ;; Registration Number: H15PRO110 |
4ed46869 | 11 | |
60acfd15 | 12 | ;; Keywords: mule, multilingual, Ethiopic |
4ed46869 KH |
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 | |
d7142f3e | 18 | ;; the Free Software Foundation; either version 3, or (at your option) |
4ed46869 KH |
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 | |
e803d6bd | 27 | ;; along with GNU Emacs; see the file COPYING. If not, write to the |
3a35cf56 LK |
28 | ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
29 | ;; Boston, MA 02110-1301, USA. | |
60acfd15 | 30 | |
b8b2ea31 | 31 | ;; Author: TAKAHASHI Naoto <ntakahas@m17n.org> |
4ed46869 | 32 | |
e8af40ee PJ |
33 | ;;; Commentary: |
34 | ||
4ed46869 KH |
35 | ;;; Code: |
36 | ||
9017ac97 KH |
37 | (require 'robin) |
38 | ||
3675c8b1 JB |
39 | (defvar rmail-current-message) |
40 | (defvar rmail-message-vector) | |
41 | ||
22e382fd KH |
42 | ;; Information for exiting Ethiopic environment. |
43 | (defvar exit-ethiopic-environment-data nil) | |
44 | ||
45717142 KH |
45 | ;;;###autoload |
46 | (defun setup-ethiopic-environment-internal () | |
22e382fd KH |
47 | (let ((key-bindings '((" " . ethio-insert-space) |
48 | ([?\S- ] . ethio-insert-ethio-space) | |
9017ac97 | 49 | ;; ([?\C-'] . ethio-gemination) |
b8b2ea31 KH |
50 | ([f3] . ethio-fidel-to-sera-buffer) |
51 | ([S-f3] . ethio-fidel-to-sera-region) | |
9017ac97 | 52 | ([C-f3] . ethio-fidel-to-sera-marker) |
22e382fd KH |
53 | ([f4] . ethio-sera-to-fidel-buffer) |
54 | ([S-f4] . ethio-sera-to-fidel-region) | |
9017ac97 | 55 | ([C-f4] . ethio-sera-to-fidel-marker) |
b8b2ea31 KH |
56 | ([S-f5] . ethio-toggle-punctuation) |
57 | ([S-f6] . ethio-modify-vowel) | |
58 | ([S-f7] . ethio-replace-space) | |
9017ac97 | 59 | ;; ([S-f8] . ethio-input-special-character) ; deprecated |
b8b2ea31 KH |
60 | ([C-f9] . ethio-toggle-space) |
61 | ([S-f9] . ethio-replace-space) ; as requested | |
62 | )) | |
22e382fd KH |
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 | ||
06772363 SM |
72 | (add-hook 'find-file-hook 'ethio-find-file) |
73 | (add-hook 'write-file-functions 'ethio-write-file) | |
22e382fd KH |
74 | (add-hook 'after-save-hook 'ethio-find-file)) |
75 | ||
76 | (defun exit-ethiopic-environment () | |
c256b4ab | 77 | "Exit Ethiopic language environment." |
22e382fd KH |
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 | ||
06772363 SM |
84 | (remove-hook 'find-file-hook 'ethio-find-file) |
85 | (remove-hook 'write-file-functions 'ethio-write-file) | |
22e382fd | 86 | (remove-hook 'after-save-hook 'ethio-find-file)) |
335a7ad7 | 87 | |
4ed46869 KH |
88 | ;; |
89 | ;; ETHIOPIC UTILITY FUNCTIONS | |
90 | ;; | |
91 | ||
60acfd15 KH |
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 | |
a1506d29 | 96 | ;; but file I/O is done in the \uXXXX style, where XXXX is |
60acfd15 KH |
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. | |
60acfd15 | 101 | |
4ed46869 | 102 | ;; |
60acfd15 KH |
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). | |
63a4e775 | 122 | If nil, associate ASCII question mark with Ethiopic stylized question |
60acfd15 KH |
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. | |
9017ac97 | 127 | If nil, put an apostrophe only between a 6th-form consonant and an |
60acfd15 KH |
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 | ||
60acfd15 KH |
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.") | |
4ed46869 | 144 | |
9017ac97 KH |
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 | ||
4ed46869 KH |
186 | ;; |
187 | ;; SERA to FIDEL | |
188 | ;; | |
a1506d29 | 189 | |
4ed46869 | 190 | ;;;###autoload |
9017ac97 KH |
191 | (defun ethio-sera-to-fidel-buffer (&optional secondary force) |
192 | "Convert the current buffer from SERA to FIDEL. | |
60acfd15 | 193 | |
9017ac97 KH |
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. | |
4ed46869 | 200 | |
9017ac97 | 201 | If the 2nd optional argument FORCE is non-nil, perform conversion |
60acfd15 | 202 | even if the buffer is read-only. |
4ed46869 | 203 | |
60acfd15 | 204 | See also the descriptions of the variables |
9017ac97 | 205 | `ethio-use-colon-for-colon' and `ethio-use-three-dot-question'." |
4ed46869 | 206 | |
9017ac97 KH |
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) | |
4ed46869 KH |
214 | |
215 | ;;;###autoload | |
9017ac97 KH |
216 | (defun ethio-sera-to-fidel-region (begin end &optional secondary force) |
217 | "Convert the characters in region from SERA to FIDEL. | |
60acfd15 KH |
218 | |
219 | The variable `ethio-primary-language' specifies the primary | |
220 | language and `ethio-secondary-language' specifies the secondary. | |
4ed46869 | 221 | |
9017ac97 KH |
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. | |
4ed46869 | 225 | |
9017ac97 KH |
226 | If the 4th argument FORCE is given and non-nil, perform |
227 | conversion even if the buffer is read-only. | |
60acfd15 KH |
228 | |
229 | See also the descriptions of the variables | |
9017ac97 | 230 | `ethio-use-colon-for-colon' and `ethio-use-three-dot-question'." |
60acfd15 | 231 | |
9017ac97 | 232 | (interactive "r\nP") |
4ed46869 KH |
233 | (if (and buffer-read-only |
234 | (not force) | |
235 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) | |
236 | (error "")) | |
60acfd15 KH |
237 | |
238 | (let ((ethio-primary-language ethio-primary-language) | |
239 | (ethio-secondary-language ethio-secondary-language) | |
9017ac97 KH |
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. | |
60acfd15 | 244 | (buffer-read-only nil) |
9017ac97 KH |
245 | (lang (if secondary ethio-secondary-language ethio-primary-language)) |
246 | ret) | |
4ed46869 | 247 | |
9017ac97 KH |
248 | (ethio-use-colon-for-colon ethio-use-colon-for-colon) |
249 | (ethio-use-three-dot-question ethio-use-three-dot-question) | |
4ed46869 | 250 | |
9017ac97 KH |
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 | |
60acfd15 | 279 | |
9017ac97 KH |
280 | ;; No more "\", i.e. nothing to do. |
281 | ((not (search-forward "\\" nil 0)) | |
282 | nil) | |
60acfd15 | 283 | |
9017ac97 KH |
284 | ;; Hereafter point is put after a "\". |
285 | ;; First delete that "\", then check the following chars. | |
60acfd15 | 286 | |
9017ac97 KH |
287 | ;; A language flag. |
288 | ((progn (delete-char -1) (setq lflag (ethio-process-language-flag))) | |
289 | lflag) | |
60acfd15 | 290 | |
9017ac97 KH |
291 | ;; "\\" : leave the second "\" and continue in the same language. |
292 | ((= (following-char) ?\\) | |
293 | (forward-char 1) | |
294 | nil) | |
60acfd15 | 295 | |
9017ac97 KH |
296 | ;; "\ " : delete the following " " and toggle the language. |
297 | ((= (following-char) 32) | |
298 | (delete-char 1) | |
299 | 'toggle) | |
60acfd15 | 300 | |
9017ac97 KH |
301 | ;; A "\" but not a special sequence: simply toggle the language. |
302 | (t | |
303 | 'toggle)))) | |
60acfd15 | 304 | |
9017ac97 KH |
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) | |
60acfd15 | 329 | (forward-char 1)) |
9017ac97 | 330 | lang) |
60acfd15 | 331 | |
9017ac97 KH |
332 | ((eobp) |
333 | nil) | |
60acfd15 | 334 | |
9017ac97 KH |
335 | ;; Now we must be looking at a "\". |
336 | ;; First delete that "\", then check the following chars. | |
60acfd15 | 337 | |
9017ac97 KH |
338 | ((progn (delete-char 1) (= (following-char) 32)) |
339 | (delete-char 1) | |
340 | 'toggle) | |
60acfd15 | 341 | |
9017ac97 KH |
342 | ((looking-at "[,.;:'`?\\]+") |
343 | (goto-char (match-end 0)) | |
344 | lang) | |
60acfd15 | 345 | |
9017ac97 KH |
346 | ((/= (following-char) ?~) |
347 | 'toggle) | |
60acfd15 | 348 | |
9017ac97 | 349 | ;; Now we must be looking at a "~". |
60acfd15 | 350 | |
9017ac97 KH |
351 | ((setq lflag (ethio-process-language-flag)) |
352 | lflag) | |
60acfd15 | 353 | |
9017ac97 | 354 | ;; Delete the following "~" and check the following chars. |
60acfd15 | 355 | |
9017ac97 KH |
356 | ((progn (delete-char 1) (looking-at "! ?")) |
357 | (replace-match "") | |
358 | (if (re-search-forward "\\\\~! ?" nil 0) | |
359 | (replace-match "")) | |
360 | lang) | |
60acfd15 | 361 | |
9017ac97 KH |
362 | ((looking-at "-: ?") |
363 | (replace-match "") | |
364 | (ethio-use-colon-for-colon t) | |
365 | lang) | |
60acfd15 | 366 | |
9017ac97 KH |
367 | ((looking-at "`: ?") |
368 | (replace-match "") | |
369 | (ethio-use-colon-for-colon nil) | |
370 | lang) | |
60acfd15 | 371 | |
9017ac97 KH |
372 | ((looking-at "`| ?") |
373 | (replace-match "") | |
374 | (ethio-use-three-dot-question t) | |
375 | lang) | |
60acfd15 | 376 | |
9017ac97 KH |
377 | ((looking-at "\\? ?") |
378 | (replace-match "") | |
379 | (ethio-use-three-dot-question nil) | |
380 | lang) | |
60acfd15 | 381 | |
9017ac97 KH |
382 | ;; Unknown tilde escape. Recover the deleted chars. |
383 | (t | |
384 | (insert "\\~") | |
385 | lang)))) | |
60acfd15 KH |
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 | |
9017ac97 | 391 | `ethio-secondary-language' based on \"lang1\" and \"lang2\". |
60acfd15 KH |
392 | Then delete the language flag \"~lang1~lang2\" from the buffer. |
393 | Return value is the new primary language. | |
394 | ||
9017ac97 KH |
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. | |
60acfd15 KH |
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\\]") | |
9017ac97 KH |
409 | (setq lang1 (ethio-flag-to-language (match-string 1))) |
410 | (setq lang2 (ethio-flag-to-language (match-string 2)))) | |
60acfd15 KH |
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\\]") | |
9017ac97 | 420 | (setq lang1 (ethio-flag-to-language (match-string 1)))) |
60acfd15 KH |
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 | ||
60acfd15 KH |
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))) | |
a1506d29 | 436 | |
9017ac97 | 437 | (defun ethio-process-digits nil |
4ed46869 KH |
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) | |
9017ac97 | 454 | (insert (aref [?፲ ?፳ ?፴ ?፵ ?፶ ?፷ ?፸ ?፹ ?፺] (- ch ?1))) |
4ed46869 KH |
455 | (setq z (1- z))) |
456 | ||
457 | ;; first digit is 2, 3, ..., or 9 | |
458 | ((/= ch ?1) | |
9017ac97 | 459 | (insert (aref [?፪ ?፫ ?፬ ?፭ ?፮ ?፯ ?፰ ?፱] (- ch ?2)))) |
4ed46869 KH |
460 | |
461 | ;; single 1 | |
462 | ((= z 0) | |
9017ac97 | 463 | (insert "፩"))) |
4ed46869 KH |
464 | |
465 | ;; 100 | |
466 | (if (= (mod z 4) 2) | |
9017ac97 | 467 | (insert "፻")) |
4ed46869 KH |
468 | |
469 | ;; 10000 | |
9017ac97 | 470 | (insert-char ?፼ (/ z 4))))) |
4ed46869 KH |
471 | |
472 | ;;;###autoload | |
60acfd15 KH |
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") | |
4ed46869 | 478 | (if (and buffer-read-only |
60acfd15 | 479 | (not force) |
4ed46869 KH |
480 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) |
481 | (error "")) | |
482 | (save-excursion | |
483 | (goto-char (point-min)) | |
9017ac97 | 484 | (while (search-forward "<sera>" nil t) |
60acfd15 | 485 | (ethio-sera-to-fidel-region |
4ed46869 | 486 | (point) |
9017ac97 | 487 | (if (search-forward "</sera>" nil t) |
4ed46869 KH |
488 | (match-beginning 0) |
489 | (point-max)) | |
490 | nil | |
491 | 'force)))) | |
492 | ||
493 | ;; | |
494 | ;; FIDEL to SERA | |
495 | ;; | |
496 | ||
60acfd15 KH |
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 ""))) | |
4ed46869 KH |
503 | |
504 | ;;;###autoload | |
9017ac97 KH |
505 | (defun ethio-fidel-to-sera-buffer (&optional secondary force) |
506 | "Replace all the FIDEL characters in the current buffer to the SERA format. | |
60acfd15 KH |
507 | The variable `ethio-primary-language' specifies the primary |
508 | language and `ethio-secondary-language' specifies the secondary. | |
4ed46869 | 509 | |
9017ac97 KH |
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. | |
4ed46869 | 513 | |
9017ac97 | 514 | If the 2nd optional argument FORCE is non-nil, convert even if the |
60acfd15 KH |
515 | buffer is read-only. |
516 | ||
517 | See also the descriptions of the variables | |
70e9e25e | 518 | `ethio-use-colon-for-colon', `ethio-use-three-dot-question', |
60acfd15 | 519 | `ethio-quote-vowel-always' and `ethio-numeric-reduction'." |
4ed46869 | 520 | |
9017ac97 KH |
521 | (interactive "P") |
522 | (ethio-fidel-to-sera-region (point-min) (point-max) secondary force)) | |
4ed46869 KH |
523 | |
524 | ;;;###autoload | |
9017ac97 KH |
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 | ||
60acfd15 KH |
528 | The variable `ethio-primary-language' specifies the primary |
529 | language and `ethio-secondary-language' specifies the secondary. | |
4ed46869 | 530 | |
9017ac97 KH |
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. | |
4ed46869 | 534 | |
9017ac97 | 535 | If the 4th argument FORCE is given and non-nil, convert even if the |
4ed46869 KH |
536 | buffer is read-only. |
537 | ||
60acfd15 | 538 | See also the descriptions of the variables |
70e9e25e | 539 | `ethio-use-colon-for-colon', `ethio-use-three-dot-question', |
60acfd15 | 540 | `ethio-quote-vowel-always' and `ethio-numeric-reduction'." |
4ed46869 | 541 | |
9017ac97 | 542 | (interactive "r\nP") |
4ed46869 KH |
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 | ||
9017ac97 KH |
548 | (save-restriction |
549 | (narrow-to-region begin end) | |
4ed46869 | 550 | |
9017ac97 KH |
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) | |
4ed46869 | 557 | |
9017ac97 KH |
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) | |
60acfd15 | 571 | (progn |
9017ac97 KH |
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") | |
60acfd15 | 579 | (insert flag) |
9017ac97 | 580 | (setq mode 'ethiopic)))) |
4ed46869 | 581 | |
9017ac97 KH |
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") | |
4ed46869 | 589 | |
9017ac97 KH |
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"))) | |
4ed46869 | 609 | |
9017ac97 KH |
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))))))))) | |
4ed46869 KH |
641 | |
642 | ;;;###autoload | |
60acfd15 KH |
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." | |
4ed46869 | 646 | |
60acfd15 | 647 | (interactive "P") |
4ed46869 | 648 | (if (and buffer-read-only |
60acfd15 | 649 | (not force) |
4ed46869 KH |
650 | (not (y-or-n-p "Buffer is read-only. Force to convert? "))) |
651 | (error "")) | |
652 | (save-excursion | |
653 | (goto-char (point-min)) | |
9017ac97 | 654 | (while (search-forward "<sera>" nil t) |
60acfd15 | 655 | (ethio-fidel-to-sera-region |
4ed46869 | 656 | (point) |
9017ac97 | 657 | (if (search-forward "</sera>" nil t) |
4ed46869 KH |
658 | (match-beginning 0) |
659 | (point-max)) | |
660 | nil | |
661 | 'force)))) | |
662 | ||
4ed46869 KH |
663 | ;; |
664 | ;; vowel modification | |
665 | ;; | |
666 | ||
667 | ;;;###autoload | |
60acfd15 | 668 | (defun ethio-modify-vowel nil |
4ed46869 KH |
669 | "Modify the vowel of the FIDEL that is under the cursor." |
670 | (interactive) | |
9017ac97 KH |
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: ")) | |
60acfd15 | 677 | (delete-char 1) |
9017ac97 KH |
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))))))) | |
4ed46869 KH |
696 | |
697 | ;; | |
698 | ;; space replacement | |
699 | ;; | |
700 | ||
701 | ;;;###autoload | |
702 | (defun ethio-replace-space (ch begin end) | |
60acfd15 KH |
703 | "Replace ASCII spaces with Ethiopic word separators in the region. |
704 | ||
705 | In the specified region, replace word separators surrounded by two | |
9017ac97 | 706 | Ethiopic characters, depending on the first argument CH, which should |
60acfd15 KH |
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 | ||
9017ac97 | 713 | The 2nd and 3rd arguments BEGIN and END specify the region." |
60acfd15 | 714 | |
4ed46869 KH |
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) | |
4ed46869 KH |
721 | |
722 | (cond | |
4ed46869 | 723 | ((= ch ?1) |
60acfd15 KH |
724 | ;; an Ethiopic word separator --> an ASCII space |
725 | (goto-char (point-min)) | |
9017ac97 KH |
726 | (while (search-forward "፡" nil t) |
727 | (replace-match " ")) | |
4ed46869 | 728 | |
60acfd15 KH |
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") | |
9017ac97 | 733 | (forward-char -1))) |
4ed46869 KH |
734 | |
735 | ((= ch ?2) | |
60acfd15 | 736 | ;; An Ethiopic word separator --> two ASCII spaces |
4ed46869 | 737 | (goto-char (point-min)) |
9017ac97 | 738 | (while (search-forward "፡" nil t) |
60acfd15 | 739 | (replace-match " ")) |
4ed46869 | 740 | |
60acfd15 KH |
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") | |
9017ac97 | 745 | (forward-char -1))) |
4ed46869 | 746 | |
60acfd15 KH |
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) | |
9017ac97 KH |
752 | (replace-match "\\1፡\\2") |
753 | (forward-char -1)) | |
4ed46869 | 754 | |
60acfd15 KH |
755 | ;; Three or more ASCII spaces between Ethiopic characters |
756 | ;; --> An Ethiopic word separator + (N - 2) ASCII spaces | |
757 | (goto-char (point-min)) | |
9017ac97 KH |
758 | (while (re-search-forward "\\(\\ce\\) \\( +\\ce\\)" nil t) |
759 | (replace-match "\\1፡\\2") | |
760 | (forward-char -1))))))) | |
4ed46869 KH |
761 | |
762 | ;; | |
60acfd15 | 763 | ;; special icons |
4ed46869 KH |
764 | ;; |
765 | ||
9017ac97 | 766 | ;; This function is deprecated. |
4ed46869 KH |
767 | ;;;###autoload |
768 | (defun ethio-input-special-character (arg) | |
9017ac97 KH |
769 | "This function is deprecated." |
770 | (interactive "*cInput number: 1. 2. 3. 4. 5.") | |
4ed46869 KH |
771 | (cond |
772 | ((= arg ?1) | |
9017ac97 | 773 | (insert "")) |
4ed46869 | 774 | ((= arg ?2) |
9017ac97 | 775 | (insert "")) |
4ed46869 | 776 | ((= arg ?3) |
9017ac97 | 777 | (insert "")) |
4ed46869 | 778 | ((= arg ?4) |
9017ac97 | 779 | (insert "")) |
60acfd15 | 780 | ((= arg ?5) |
9017ac97 | 781 | (insert "")) |
4ed46869 KH |
782 | (t |
783 | (error "")))) | |
784 | ||
60acfd15 KH |
785 | ;; |
786 | ;; TeX support | |
787 | ;; | |
788 | ||
60acfd15 KH |
789 | ;;;###autoload |
790 | (defun ethio-fidel-to-tex-buffer nil | |
9017ac97 | 791 | "Convert each fidel characters in the current buffer into a fidel-tex command." |
60acfd15 | 792 | (interactive) |
9017ac97 KH |
793 | (let ((buffer-read-only nil) |
794 | comp ch) | |
60acfd15 | 795 | |
9017ac97 KH |
796 | ;; Special treatment for geminated characters. |
797 | ;; Geminated characters la", etc. change into \geminateG{\laG}, etc. | |
60acfd15 | 798 | (goto-char (point-min)) |
3a549e1c | 799 | (while (re-search-forward "፟\\|" nil t) |
9017ac97 KH |
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 "}"))) | |
60acfd15 | 809 | |
9017ac97 | 810 | ;; Special Ethiopic punctuations. |
60acfd15 | 811 | (goto-char (point-min)) |
9017ac97 KH |
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)))) | |
60acfd15 KH |
828 | |
829 | ;; Ethiopic characters to TeX macros | |
9017ac97 KH |
830 | (robin-invert-region (point-min) (point-max) "ethiopic-tex") |
831 | ||
60acfd15 KH |
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 | ||
60acfd15 | 842 | ;; TeX macros to Ethiopic characters |
9017ac97 | 843 | (robin-convert-region (point-min) (point-max) "ethiopic-tex") |
60acfd15 KH |
844 | |
845 | ;; compose geminated characters | |
846 | (goto-char (point-min)) | |
9017ac97 | 847 | (while (re-search-forward "\\\\geminateG{\\(\\ce?\\)}" nil t) |
3a549e1c | 848 | (replace-match "\\1፟")) |
60acfd15 | 849 | |
9017ac97 | 850 | ;; remove redundant braces, if any |
60acfd15 | 851 | (goto-char (point-min)) |
9017ac97 KH |
852 | (while (re-search-forward "{\\(\\ce\\)}" nil t) |
853 | (replace-match "\\1")) | |
60acfd15 KH |
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 | ||
af109896 | 866 | Each escape sequence is of the form \\uXXXX, where XXXX is the |
60acfd15 KH |
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 | ||
60acfd15 | 873 | (goto-char (point-min)) |
9017ac97 KH |
874 | (while (re-search-forward "[ሀ-፼]" nil t) |
875 | (setq ucode (preceding-char)) | |
60acfd15 | 876 | (delete-backward-char 1) |
9017ac97 KH |
877 | (insert |
878 | (format (if ethio-java-save-lowercase "\\u%4x" "\\u%4X") | |
879 | ucode))))) | |
60acfd15 KH |
880 | |
881 | ;;;###autoload | |
882 | (defun ethio-java-to-fidel-buffer nil | |
883 | "Convert the Java escape sequences into corresponding Ethiopic characters." | |
9017ac97 KH |
884 | (let ((case-fold-search t) |
885 | (ucode)) | |
60acfd15 | 886 | (goto-char (point-min)) |
9017ac97 KH |
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)))))) | |
60acfd15 KH |
891 | |
892 | ;; | |
893 | ;; file I/O hooks | |
894 | ;; | |
895 | ||
896 | ;;;###autoload | |
897 | (defun ethio-find-file nil | |
9017ac97 | 898 | "Transliterate file content into Ethiopic dependig on filename suffix." |
60acfd15 KH |
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)) | |
6b61353c | 907 | (let ((ethio-sera-being-called-by-w3 t)) |
60acfd15 KH |
908 | (save-excursion |
909 | (ethio-sera-to-fidel-marker 'force) | |
910 | (goto-char (point-min)) | |
9017ac97 | 911 | (while (re-search-forward "&[lr]aquo;" nil t) |
60acfd15 | 912 | (if (= (char-after (1+ (match-beginning 0))) ?l) |
9017ac97 KH |
913 | (replace-match "«") |
914 | (replace-match "»"))) | |
60acfd15 KH |
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 | |
9017ac97 | 932 | "Transliterate Ethiopic characters in ASCII depending on the file extension." |
60acfd15 KH |
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 | |
9017ac97 | 944 | (let ((ethio-sera-being-called-by-w3 t)) |
60acfd15 KH |
945 | (ethio-fidel-to-sera-marker 'force) |
946 | (goto-char (point-min)) | |
9017ac97 KH |
947 | (while (re-search-forward "[«»]" nil t) |
948 | (replace-match (if (= (preceding-char) ?«) "«" "»"))) | |
949 | (goto-char (point-min)) | |
60acfd15 KH |
950 | (if (search-forward "<sera>" nil t) |
951 | (ethio-record-user-preference)) | |
60acfd15 KH |
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 | |
60acfd15 | 968 | (insert (if ethio-use-colon-for-colon "\\~-: " "\\~`: ") |
9017ac97 | 969 | (if ethio-use-three-dot-question "\\~`| " "\\~? "))) |
60acfd15 | 970 | |
170a94d2 KH |
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 | |
9017ac97 | 982 | (not ethio-prefer-ascii-space))) |
170a94d2 KH |
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) | |
9017ac97 | 1005 | '(?፡ ?። ?፣ ?፤ ?፥ ?፦ ?፧ ?፨ ? ? ? ? ?))) |
170a94d2 KH |
1006 | (insert-char 32 arg)) |
1007 | (t | |
9017ac97 | 1008 | (insert-char ?፡ arg)))) |
170a94d2 | 1009 | |
9017ac97 | 1010 | ;;;###autoload |
170a94d2 KH |
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") | |
9017ac97 | 1015 | (insert-char ?፡ arg)) |
170a94d2 KH |
1016 | |
1017 | ;; | |
1018 | ;; Gemination | |
1019 | ;; | |
1020 | ||
9017ac97 | 1021 | ;;;###autoload |
a5787fe3 | 1022 | (defun ethio-composition-function (pos to font-object string) |
9017ac97 | 1023 | (setq pos (1- pos)) |
3a549e1c | 1024 | (let ((pattern "\\ce\\(፟\\|\\)")) |
9017ac97 KH |
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. | |
170a94d2 KH |
1038 | (defun ethio-gemination nil |
1039 | "Compose the character before the point with the Ethiopic gemination mark. | |
c256b4ab | 1040 | If the character is already composed, decompose it and remove the gemination |
170a94d2 KH |
1041 | mark." |
1042 | (interactive "*") | |
9017ac97 KH |
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" "?") | |
3a549e1c KH |
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" ?ⷞ) | |
9017ac97 KH |
2071 | ) |
2072 | ||
2073 | ;; The ethiopic-tex package is not used for keyboard input, therefore | |
2074 | ;; not registered with the register-input-method function. | |
60acfd15 | 2075 | |
a69ed912 | 2076 | (provide 'ethio-util) |
4ed46869 | 2077 | |
9017ac97 KH |
2078 | ;;; ethio-util.el ends here |
2079 | ||
6b61353c | 2080 | ;;; arch-tag: c8feb3d6-39bf-4b0a-b6ef-26f03fbc8140 |
4ed46869 | 2081 | ;;; ethio-util.el ends here |