ethio-util.el 50 KB

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