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