]> code.delx.au - gnu-emacs/blob - leim/quail/ipa.el
("ipa-kirshenbaum"): Rename from "kirshenbaum-ipa".
[gnu-emacs] / leim / quail / ipa.el
1 ;;; ipa.el --- Quail package for inputting IPA characters -*-coding: utf-8;-*-
2
3 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
4 ;; 2006, 2007, 2008, 2009
5 ;; National Institute of Advanced Industrial Science and Technology (AIST)
6 ;; Registration Number H14PRO021
7 ;; Licensed to the Free Software Foundation.
8 ;; Copyright (C) 2009 Free Software Foundation, Inc.
9
10 ;; Keywords: multilingual, input method, IPA
11
12 ;; This file is part of GNU Emacs.
13
14 ;; GNU Emacs is free software: you can redistribute it and/or modify
15 ;; it under the terms of the GNU General Public License as published by
16 ;; the Free Software Foundation, either version 3 of the License, or
17 ;; (at your option) any later version.
18
19 ;; GNU Emacs is distributed in the hope that it will be useful,
20 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 ;; GNU General Public License for more details.
23
24 ;; You should have received a copy of the GNU General Public License
25 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
26
27 ;;; Commentary:
28
29 ;;; Code:
30
31 (require 'quail)
32 (eval-when-compile (require 'cl))
33
34 (quail-define-package
35 "ipa" "IPA" "IPA" t
36 "International Phonetic Alphabet for English, French, German and Italian
37
38 Upside-down characters are obtained by a preceding slash (/)."
39 nil t nil nil nil nil nil nil nil nil t)
40
41 (quail-define-rules
42 ("i" ?i)
43 ("I" ?ɪ)
44 ("e" ?e)
45 ("/3" ?ɛ)
46 ("E" ?ɛ)
47 ("ae" ?æ)
48 ("a" ?a)
49 ("i-" ?ɨ)
50 ("/e" ?ə)
51 ("/a" ?ɐ)
52 ("/m" ?ɯ)
53 ("&" ?ɤ)
54 ("/v" ?ʌ)
55 ("A" ?ɑ)
56 ("o|" ?ɑ)
57 ("y" ?y)
58 ("Y" ?ʏ)
59 ("o/" ?ø)
60 ("oe" ?œ)
61 ("OE" ?ɶ)
62 ("u-" ?ʉ)
63 ("o-" ?ɵ)
64 ("u" ?u)
65 ("U" ?ʊ)
66 ("o" ?o)
67 ("/c" ?ɔ)
68 ("/A" ?ɒ)
69 ("|o" ?ɒ)
70 ("e-" ?ɚ)
71 ("e|" ?ɚ)
72 ("/3~" ["ɛ̃"])
73 ("E~" ["ɛ̃"])
74 ("A~" ["ɑ̃"])
75 ("oe~" ["œ̃"])
76 ("/c~" ["ɔ̃"])
77 ("p" ?p)
78 ("b" ?b)
79 ("t" ?t)
80 ("d" ?d)
81 ("k" ?k)
82 ("g" ?g)
83 ("f" ?f)
84 ("v" ?v)
85 ("th" ?θ)
86 ("dh" ?ð)
87 ("s" ?s)
88 ("z" ?z)
89 ("sh" ?ʃ)
90 ("zh" ?ʒ)
91 ("3" ?ʒ)
92 ("c," ?ç)
93 ("x" ?x)
94 ("/R" ?ʁ)
95 ("h" ?h)
96 ("m" ?m)
97 ("n" ?n)
98 ("gn" ?ɲ)
99 ("ng" ?ŋ)
100 ("r" ?r)
101 ("R" ?ʀ)
102 ("/r" ?ɹ)
103 ("j" ?j)
104 ("l" ?l)
105 ("/y" ?ʎ)
106 ("L" ?ʟ)
107 ("/h" ?ɥ)
108 ("w" ?w)
109 ("M" ?ʍ)
110 ("'" ?ˈ)
111 ("`" ?ˌ)
112 (":" ?ː))
113
114 (quail-define-package
115 "ipa-kirshenbaum" "IPA" "IPA-K" t
116 "The International Phonetic Alphabet, using Kirshenbaum ASCII translit.
117
118 Kirshenbaum IPA is an ASCII transliteration of the phonetic alphabet, common
119 in the Usenet groups `sci.lang' and `alt.usage.english'. This input method
120 allows you to type Kirshenbaum on your ASCII-capable keyboard, producing the
121 corresponding actual IPA characters in your editor.
122
123 See http://www.kirshenbaum.net/IPA/ascii-ipa.pdf for full details of the
124 transliteration.
125
126 A caveat with regard to that document; while XEmacs currently preserves
127 Unicode diacritics on reading and emitting them, it displays them,
128 incorrectly, as separate from the modified glyphs.")
129
130 (quail-define-rules
131 ("r" "ɹ") ;; Alveolar approximant U+0279
132 ("A" "ɑ") ;; Low back unrounded vowel U+0251
133 ("B" "β") ;; Voiced bilabial fricative U+03B2
134 ("C" "ç") ;; Voiced palatal fricative U+00E7
135 ("D" "ð") ;; Voiced dental fricative U+00F0
136 ("E" "ɛ") ;; Lower-mid front unrounded vowel U+025B
137 ("G" "ɢ") ;; Voiced uvular stop U+0262
138 ("H" "ħ") ;; Voiced pharyngeal fricative U+0127
139 ("I" "ɪ") ;; Semi-high front unrounded vowel U+026A
140 ("J" "ɟ") ;; Voiced palatal stop U+025F
141 ("L" ["ɫ" ;; Voiced velar lateral U+026B
142 "ʟ" ;; Voiced velar lateral U+029F
143 "ɬ"]) ;; Voiced alveolar lateral fricative U+026C
144 ("M" "ɱ") ;; Labio-dental nasal U+0271
145 ("N" "ŋ") ;; Velar nasal U+014B
146 ("O" "ɔ") ;; Low-mid back rounded vowel U+0254
147 ("P" "ɸ") ;; Voiceless bilabial fricative U+0278
148 ("Q" "ɣ") ;; Voiced velar fricative U+0263
149 ("R" ["ʀ" ;; Alveolar trill U+0280
150 "ɚ"]) ;; Rhotacised schwa U+025A
151 ("@<r>" "ɚ") ;; Mid central rhotacised vowel U+025A
152 ("S" "ʃ") ;; Voiced postalveolar fricative U+0283
153 ("T" "θ") ;; Voiced dental fricative U+03B8
154 ("U" "ʊ") ;; Semi-high back rounded vowel U+028A
155 ("V" "ʌ") ;; Low-mid back unrounded vowel U+028C
156 ("W" "œ") ;; Low-mid front rounded vowel U+0153
157 ("X" "χ") ;; Voiceless uvular fricative U+03C7
158 ("Y" "ø") ;; Upper-mid front rounded vowel U+00F8
159 ("Z" "ʒ") ;; Voiced postalveolar fricative U+0292
160 ("?" "ʔ") ;; Glottal stop U+0294
161 ("@" "ə") ;; Mid central unrounded vowel (schwa) U+0259
162 ("&" "æ") ;; Low front unrounded vowel U+00E6
163 ("*" "ɾ") ;; Voiced alveolar flap U+027E
164
165 ("a~" "ã") ;; Low central unrounded vowel, nasal U+00E3
166 ("o~" "õ") ;; Upper-mid back rounded vowel, nasal U+00F5
167 ("u~" "ũ") ;; High back rounded vowel, nasal U+0169
168 ("~" "̃") ;; +Nasalised modifier U+0303
169 (":" "ː") ;; +Long modifier U+02D0
170 ("-" "̩") ;; +Syllabic modifier U+0329
171 ("." "̣") ;; +Retroflex modifier U+0323
172 ("`" "ʼ") ;; +Ejective modifier U+02BC
173 ("[" "̪") ;; +Dental modifier U+032A
174 (";" "ʲ") ;; +Palatalised modifier U+02B2
175 ("<H>" "̴") ;; +Pharyngealised modifier U+0334
176 ("<h>" "ʰ") ;; +Aspirated modifier U+02B0
177 ("<o>" ["̥" ;; +Voiceless modifier U+0325
178 "˚"]) ;; +Unexploded modifier U+02DA
179 ("<r>" "ʳ") ;; +Rhotacised modifier U+02B3
180 ("<w>" "ʷ") ;; +Labialised modifier U+02B7
181 ("<?>" "ʱ") ;; +Murmured modififer U+02B1
182
183 ("b<trl>" "ʙ") ;; Bilabial trill U+0299
184 ("b`" "ɓ") ;; Bilabial implosive U+0253
185 ("p!" "ʘ") ;; Bilabial click U+0298
186 ("r<lbd>" "ʋ") ;; Labio-dental approximant U+028B
187 ("d`" "ɗ") ;; Dental implosive U+0257
188 ("t!" "ʇ") ;; Dental click U+0287
189 ("s<lat>" "ɬ") ;; Voiceless alveolar lateral fricative U+026C
190 ("z<lat>" "ɮ") ;; Voiced alveolar lateral fricative U+026E
191 ("r<trl>" "ʀ") ;; Alveolar trill U+0280
192
193 ("*<lat>" "ɺ") ;; Voiced alveolar lateral flap U+027A
194 ("c!" "ʗ") ;; Alveolar click U+0297
195 ("l!" "ʖ") ;; Alveolar lateral click U+0296
196 ("n." "ɳ") ;; Retroflex nasal U+0273
197 ("t." "ʈ") ;; Voiceless retroflex stop U+0288
198 ("d." "ɖ") ;; Voiced retroflex stop U+0256
199 ("s." "ʂ") ;; Voiceless retroflex fricative U+0282
200 ("z." "ʐ") ;; Voiceless retroflex fricative U+0290
201 ("r." "ɻ") ;; Retroflex approximant U+027B
202 ("l." "ɭ") ;; Retroflex lateral U+026D
203 ("*." "ɽ") ;; Retroflex flap U+027D
204
205 ("C<vcd>" "ʝ") ;; Voiced palatal fricative U+029D
206 ("j<rnd>" "ɥ") ;; Rounded palatal approximant U+0265
207 ("l^" "ʎ") ;; Palatal lateral U+028E
208 ("J`" "ʄ") ;; Palatal implosive U+0284
209 ("j<vel>" "ɰ") ;; Velar approximant U+0270
210 ("g`" "ɠ") ;; Velar implosive U+0260
211 ("k!" "ʞ") ;; Velar click U+029E
212
213 ("n<lbv>" ["n⁀g"]) ;; Labio-velar nasal
214 ("t<lbv>" ["k⁀p"]) ;; Voiceless labio-velar stop
215
216 ;; "n<lbv> for "gb" WITH U+2030 CHARACTER TIE was ambiguous and
217 ;; misleading. I _believe_ this is what was meant instead.
218 ("d<lbv>" ["g⁀b"]) ;; Voiced labio-velar stop.
219
220 ("w<vls>" "ʍ") ;; Voiceless labio-velar stop U+028D
221 ("n\"" "ɴ") ;; Uvular nasal U+0274
222 ("g\"" "ʁ") ;; Voiced uvular fricative U+0281
223 ("r\"" "ʀ") ;; Uvular trill U+0280
224 ("G`" "ʛ") ;; Voiced uvular implosive U+029B
225 ("H<vcd>" "ʕ") ;; Voiced pharyngeal fricative U+0295
226
227 ("h<?>" "ɦ") ;; Murmured glottal fricative U+0266
228 ("I." "ʏ") ;; Semi-high front rounded vowel U+028F
229 ("&." "ɶ") ;; Low front unrounded vowel U+0276
230
231 ("i\"" "ɨ") ;; High central unrounded vowel U+0268
232 ("u\"" "ʉ") ;; High central rounded vowel U+0289
233 ("@<umd>" "ɘ") ;; Upper-mid central unrounded vowel U+0258
234
235 ("R<umd>" "ɝ") ;; Upper-mid central rhotacised vowel U+025D
236
237 ("@." "ɵ") ;; Mid central rounded vowel U+0275
238 ("V\"" "ɜ") ;; Lower-mid central unrounded vowel U+025C
239 ("O\"" "ɞ") ;; Lower-mid central rounded vowel U+025E
240 ("u-" "ɯ") ;; High back unrounded vowel U+026F
241 ("o-" "ɤ") ;; Upper-mid back unrounded vowel U+0264
242 ("A." "ɒ")) ;; Lower back rounded vowel U+0252
243
244
245 (defconst ipa-x-sampa-implosive-submap
246 '(("b_<" ?ɓ) ;; Voiced bilabial implosive U+0253
247 ("d_<" ?ɗ) ;; Voiced alveolar implosive U+0257
248 ("g_<" ?ɠ) ;; Voiced velar implosive U+0260
249 ("G\\_<" ?ʛ) ;; Voiced uvular implosive U+029B
250 ("J\\_<" ?ʄ)) ;; Voiced palatal implosive U+0284
251 "A map from the X-SAMPA for some implosive consonants to characters.
252 This is used because their X-SAMPA syntax is quasi-diacritic, but the
253 corresponding Unicode characters themselves don't have diacritics, they are
254 separate code points. So we need to implement some extra logic that isn't
255 normally provided by Quail.")
256
257 ;; On XEmacs, with the supplied X-SAMPA data, this function is capably
258 ;; implemented with:
259 ;;
260 ;; (list (vector (concat to-prepend quail-keymap)))
261 ;;
262 ;; Supporting GNU Emacs too makes it a good deal more complicated.
263
264 (defun ipa-x-sampa-prepend-to-keymap-entry (to-prepend quail-keymap)
265 "Return QUAIL-KEYMAP with TO-PREPEND at the beginning of each result.
266
267 QUAIL-KEYMAP is a cons that satisfies `quail-map-p'; TO-PREPEND is a
268 string."
269 (when (consp quail-keymap) (setq quail-keymap (cdr quail-keymap)))
270 (if (or (integerp quail-keymap)
271 (and (fboundp 'characterp) (characterp quail-keymap)))
272 (setq quail-keymap (list (string quail-keymap)))
273 (if (stringp quail-keymap)
274 (setq quail-keymap (list quail-keymap))
275 (assert (vectorp quail-keymap) t)
276 (setq quail-keymap (append quail-keymap nil))))
277 (list
278 (apply 'vector
279 (mapcar
280 #'(lambda (entry)
281 (assert (char-or-string-p entry) t)
282 (format "%s%s" to-prepend
283 (if (integerp entry) (string entry) entry)))
284 quail-keymap))))
285
286 (defun ipa-x-sampa-underscore-implosive (input-string length)
287 "Return keymap with IPA implosives, for INPUT-STRING, length LENGTH.
288
289 The implosive consonants in X-SAMPA are represented with more or less a
290 diacritic syntax, but the property +implosive in the IPA is expressed using
291 separate characters, and not using a diacritic. This function works around
292 the confusion that implies when generating IPA from X-SAMPA; it returns a
293 Quail map that is a copy of the map for `_', but with all the DIACRITIC
294 entries changed to return the diacritic together with the base character,
295 and with the map to the implosive added to its end.
296
297 Like all `quail-defrule'-assigned functions, this will be called once for
298 each particular sequence of keys, the first time the user types that
299 particular sequence of keys, and the result will be cached by Quail."
300 (let* ((input-string (substring input-string 0 (or length)))
301 (underscore-map (copy-tree (quail-lookup-key "_")))
302 (split-input (split-string input-string "_"))
303 (pre-underscore (car split-input))
304 (pre-underscore-map (quail-lookup-key pre-underscore))
305 (x-sampa-submap-entry
306 (assoc (format "%s<" input-string) ipa-x-sampa-implosive-submap))
307 underscore-map-entry)
308 (if (and (consp pre-underscore-map) (car pre-underscore-map))
309 (setq pre-underscore-map (car pre-underscore-map))
310 (setq pre-underscore-map pre-underscore))
311 (unless (stringp pre-underscore-map)
312 (setq pre-underscore-map (string pre-underscore-map)))
313 (dolist (underscoring underscore-map)
314 (cond ((null underscoring))
315 ((eq (length underscoring) 2)
316 (setq underscore-map-entry (second underscoring))
317 (setcdr underscoring (ipa-x-sampa-prepend-to-keymap-entry
318 pre-underscore-map underscore-map-entry)))
319 ((eq (length underscoring) 3)
320 (setq underscore-map-entry (second (third underscoring)))
321 (setcdr (third underscoring)
322 (ipa-x-sampa-prepend-to-keymap-entry
323 pre-underscore-map underscore-map-entry)))
324 (t
325 (assert (null t) t
326 "Can't handle subtrees of this level right now."))))
327 (append underscore-map (list (list ?< (second x-sampa-submap-entry))))))
328
329 (quail-define-package
330 "ipa-x-sampa" "IPA" "IPA-X" t
331 "The International Phonetic Alphabet, using J.C. Wells' X-SAMPA.
332
333 X-SAMPA is an ASCII transliteration of the IPA, normally used for data
334 exchange in environments where Unicode is not available. This input method
335 uses this transliteration to allow you to produce the IPA in your editor
336 with a keyboard that's limited to ASCII.
337
338 See http://www.phon.ucl.ac.uk/home/sampa/ipasam-x.pdf for a full definition
339 of the mapping. A caveat with regard to that document; while XEmacs
340 currently preserves Unicode diacritics on reading and emitting them, it
341 displays them, incorrectly, as separate from the modified glyphs." nil t t)
342
343 (quail-define-rules
344 ;; Table taken from http://en.wikipedia.org/wiki/X-SAMPA, checked with
345 ;; http://www.phon.ucl.ac.uk/home/sampa/ipasam-x.pdf
346
347 ("d`" "ɖ") ;; Voiced retroflex plosive U+0256
348
349 ;; In the Wikipedia article, they list ASCII g as mapping to U+0261, LATIN
350 ;; SMALL LETTER SCRIPT G. The typeset g is equally acceptable as the voiced
351 ;; velar plosive, however, and we don't override the identity mapping here.
352
353 ("h\\" "ɦ") ;; Voiced glottal fricative U+0266
354 ("j\\" "ʝ") ;; Voiced palatal fricative U+029D
355 ("l`" "ɭ") ;; Retroflex lateral approximant U+026D
356 ("l\\" "ɺ") ;; Alveolar lateral flap U+027A
357 ("n`" "ɳ") ;; Retroflex nasal U+0273
358 ("p\\" "ɸ") ;; Voiceless bilabial fricative U+0278
359 ("r`" "ɽ") ;; Retroflex flap U+027D
360 ("r\\" "ɹ") ;; Alveolar approximant U+0279
361 ("r\\`" "ɻ") ;; Retroflex approximant U+027B
362 ("s`" "ʂ") ;; Voiceless retroflex fricative U+0282
363 ("s\\" "ɕ") ;; Voiceless alveolo-palatal fricative U+0255
364 ("t`" "ʈ") ;; Voiceless retroflex plosive U+0288
365 ("v\\" "ʋ") ;; Labiodental approximant U+028B
366 ("x\\" "ɧ") ;; Voiceless palatal-velar fricative U+0267
367 ("z`" "ʐ") ;; Voiced retroflex fricative U+0290
368 ("z\\" "ʑ") ;; Voiced alveolo-palatal fricative U+0291
369 ("A" "ɑ") ;; Open back unrounded vowel U+0251
370 ("B" "β") ;; Voiced bilabial fricative U+03B2
371 ("B\\" "ʙ") ;; Bilabial trill U+0299
372 ("C" "ç") ;; Voiceless palatal fricative U+00E7
373 ("D" "ð") ;; Voiced dental fricative U+00F0
374 ("E" "ɛ") ;; Open-mid front unrounded vowel U+025B
375 ("F" "ɱ") ;; Labiodental nasal U+0271
376 ("G" "ɣ") ;; Voiced velar fricative U+0263
377 ("G\\" "ɢ") ;; Voiced uvular plosive U+0262
378 ("H" "ɥ") ;; Labial-palatal approximant U+0265
379 ("H\\" "ʜ") ;; Voiceless epiglottal fricative U+029C
380 ("I" "ɪ") ;; Near-close near-front unrounded vowel U+026A
381 ("I\\" "Ɨ") ;; Central lax close unrounded vowel U+0197
382 ("J" "ɲ") ;; Palatal nasal U+0272
383 ("J\\" "ɟ") ;; Voiceless palatal plosive U+025F
384 ("K" "ɬ") ;; Voiceless alveolar lateral fricative U+026C
385 ("K\\" "ɮ") ;; Voiced alveolar lateral fricative U+026E
386 ("L" "ʎ") ;; Palatal lateral approximant U+028E
387 ("L\\" "ʟ") ;; Velar lateral approximant U+029F
388 ("M" "ɯ") ;; Close back unrounded vowel U+026F
389 ("M\\" "ɰ") ;; Velar approximant U+0270
390 ("N" "ŋ") ;; Velar nasal U+014B
391 ("N\\" "ɴ") ;; Uvular nasal U+0274
392 ("O" "ɔ") ;; Open-mid back rounded vowel U+0254
393 ("O\\" "ʘ") ;; Bilabial click U+0298
394 ("P" "ʋ") ;; Labiodental approximant U+028B
395 ("Q" "ɒ") ;; Open back rounded vowel U+0252
396 ("R" "ʁ") ;; Voiced uvular fricative U+0281
397 ("R\\" "ʀ") ;; Uvular trill U+0280
398 ("S" "ʃ") ;; Voiceless postalveolar fricative U+0283
399 ("T" "θ") ;; Voiceless dental fricative U+03B8
400 ("U" "ʊ") ;; Near-close near-back rounded vowel U+028A
401 ("U\\" ["ʊ̵"]) ;; Central lax close rounded vowel, U+028A U+0335
402 ("V" "ʌ") ;; Open-mid back unrounded vowel U+028C
403 ("W" "ʍ") ;; Voiceless labial-velar fricative U+028D
404 ("X" "χ") ;; Voiceless uvular fricative U+03C7
405 ("X\\" "ħ") ;; Voiceless pharyngeal fricative U+0127
406 ("Y" "ʏ") ;; Near-close near-front rounded vowel U+028F
407 ("Z" "ʒ") ;; Voiced postalveolar fricative U+0292
408
409 ("\"" "ˈ") ;; Primary stress U+02C8
410 ("%" "ˌ") ;; Secondary stress U+02CC
411 (":" "ː") ;; Long U+02D0
412 (":\\" "ˑ") ;; Half-long U+02D1
413 ("@" "ə") ;; Schwa U+0259
414 ("@\\" "ɘ") ;; Close-mid central unrounded vowel U+0258
415 ("@`" "ɚ") ;; Rhotacised schwa U+025A
416 ("{" "æ") ;; Near-open front unrounded vowel U+00E6
417 ("}" "ʉ") ;; Close central rounded vowel U+0289
418 ("1" "ɨ") ;; Close central unrounded vowel U+0268
419 ("2" "ø") ;; Close-mid front rounded vowel U+00F8
420 ("3" "ɜ") ;; Open-mid central unrounded vowel U+025C
421 ("3\\" "ɞ") ;; Open-mid central rounded vowel U+025E
422 ("4" "ɾ") ;; Alveolar flap U+027E
423 ("5" "ɫ") ;; Velarised alveolar lateral approximant U+026B
424 ("6" "ɐ") ;; Near-open central vowel U+0250
425 ("7" "ɤ") ;; Close-mid back unrounded vowel U+0264
426 ("8" "ɵ") ;; Close-mid central rounded vowel U+0275
427 ("9" "œ") ;; Open-mid front rounded vowel U+0153
428 ("&" "ɶ") ;; Open front rounded vowel U+0276
429 ("?" "ʔ") ;; Glottal stop U+0294
430 ("?\\" "ʕ") ;; Voiced pharyngeal fricative U+0295
431 ;; The undefined escape character, ignored.
432 ;; Indeterminacy in French vowels, ignored.
433 ;; Begin nonsegmental notation, ignored.
434 ("<\\" "ʢ") ;; Voiced epiglottal fricative U+02A2
435 ;; End nonsegmental notation, ignored.
436 (">\\" "ʡ") ;; Epiglottal plosive U+02A1
437 ("^" "↑") ;; Upstep U+2191
438 ("!" "↓") ;; Downstep U+2193
439 ("!\\" "ǃ") ;; Postalveolal click U+01C3
440 ("\\" "ǀ") ;; Dental click U+01C0
441 ("\\|\\" "ǁ") ;; Lateral alveolar click U+01C1
442 ("=\\" "ǂ") ;; Palatal click U+01C2
443 ("-\\" "̮") ;; Linking mark U+032E
444
445 ;; Diacritics. Note that XEmacs doesn't yet have composed characters, so we
446 ;; can input them, but they won't display properly. If you send email using
447 ;; them, and the recipient's client is capable, they will get through,
448 ;; though.
449
450 ("_\"" "̈") ;; Centralised U+0308
451 ("_+" "̟") ;; Advanced U+031F
452 ("_-" "̠") ;; Retracted U+0320
453 ("_/" "ˇ") ;; Rising tone U+02C7
454 ("_0" "̥") ;; Voiceless U+0325
455 ("_=" "̩") ;; Syllabic U+0329
456 ("=" "̩") ;; Syllabic U+0329
457 ("_>" "ʼ") ;; Ejective U+02BC
458 ("_?\\" "ˤ") ;; Pharyngealised U+02E4
459 ("_\\" "ˆ") ;; Falling Tone U+02C6
460 ("_^" "̯") ;; Non-syllabic U+032F
461 ("_}" "̚") ;; No audible release U+031A
462 ;; ` is alternatively; retroflexion in consonants
463 ("`" "˞") ;; Rhotacization in vowels U+02DE
464 ("_~" "̃") ;; Nasalisation U+0303
465 ("~" "̃") ;; Nasalisation U+0303
466 ("_A" "̘") ;; Advanced tongue root U+0318
467 ("_a" "̺") ;; Apical U+033A
468 ("_B" "̏") ;; Extra low tone U+030F
469 ;; _B_L omitted, no Unicode code point for "low rising tone."
470 ("_c" "̜") ;; Less rounded U+031C
471 ("_d" "̪") ;; Dental U+032A
472 ("_e" "̴") ;; Velarised or pharyngeal U+0334
473
474 ("<F>" "↙") ;; Global fall; SOUTH EAST ARROW; may be a bit smaller than
475 ;; intended.
476 ("_F" "̂") ;; Falling tone U+0302
477 ("_G" "ˠ") ;; Velarised U+02E0
478 ("_H" "́") ;; High tone U+0301
479 ;; "_H_T omitted, no Unicode code point for "high rising tone"
480 ("_h" "ʰ") ;; Aspirated U+02B0
481 ("_j" "ʲ") ;; Palatalised U+02B2
482 ("'" "ʲ") ;; Palatalised U+02B2
483 ("_k" "̰") ;; Creaky voice U+0330
484 ("_L" "̀") ;; Low tone U+0300
485 ("_l" "ˡ") ;; Lateral release U+02E1
486 ("_M" "̄") ;; Mid tone U+0304
487 ("_m" "̻") ;; Laminal U+033B
488 ("_N" "̼") ;; Linguolabial U+033C
489 ("_n" "ⁿ") ;; Nasal release U+207F
490 ("_O" "̹") ;; More rounded U+0339
491 ("_o" "̞") ;; Lowered U+031E
492 ("_q" "̙") ;; Retracted tongue root U+0319
493 ("<R>" "↗") ;; NORTH EAST ARROW; may be a bit smaller than intended.
494 ("_R" "̌") ;; Haček, caron, rising tone. U+030C
495 ;; _R_F omitted, apparently there's no corresponding Unicode entry.
496 ("_r" "̝") ;; Raised U+031D
497 ("_T" "̋") ;; Extra high tone U+030B
498 ("_t" "̤") ;; Breathy voice U+0324
499 ("_v" "̬") ;; Voiced U+032C
500 ("_w" "ʷ") ;; Labialised U+02B7
501 ("_X" "̆") ;; Extra-short U+0306
502 ("_x" "̽")) ;; Mid-centralised U+033D
503
504 ;; Putting in place rules for the implosives like for the others above
505 ;; breaks the "_<diacritic>" rules for b, d, g, G and J a little--you need
506 ;; to interrupt Quail before typing the underscore if you want the
507 ;; diacritic. To avoid this, handle the input specially with the function
508 ;; ipa-x-sampa-underscore-implosive.
509
510 (dolist (implosive-x-sampa (mapcar 'car ipa-x-sampa-implosive-submap))
511 (setq implosive-x-sampa (car (split-string implosive-x-sampa "_")))
512 (quail-defrule (format "%s_" implosive-x-sampa)
513 'ipa-x-sampa-underscore-implosive))
514
515 ;; arch-tag: cf2614cc-ecce-4ef5-ba51-37faeed41691
516 ;;; ipa.el ends here