]> code.delx.au - gnu-emacs/blobdiff - leim/quail/ipa.el
Use new features of libotf and m17n-lib if available.
[gnu-emacs] / leim / quail / ipa.el
index 9b6a319391815533da6e5fa82d10296745a5b2bf..668a44a7a6bcbdef5a1d5d07ee0a7e7ae7015972 100644 (file)
@@ -1,11 +1,11 @@
 ;;; ipa.el --- Quail package for inputting IPA characters  -*-coding: utf-8;-*-
 
 ;; Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-;;   2006, 2007, 2008, 2009
+;;   2006, 2007, 2008, 2009, 2010
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H14PRO021
 ;; Licensed to the Free Software Foundation.
-;; Copyright (C) 2009 Free Software Foundation, Inc.
+;; Copyright (C) 2009, 2010 Free Software Foundation, Inc.
 
 ;; Keywords: multilingual, input method, IPA
 
@@ -36,7 +36,7 @@
  "International Phonetic Alphabet for English, French, German and Italian
 
 Upside-down characters are obtained by a preceding slash (/)."
- nil t nil nil nil nil nil nil nil nil t)
+ nil nil nil nil nil nil nil nil nil nil t)
 
 (quail-define-rules
  ("i" ?i)
@@ -79,7 +79,7 @@ Upside-down characters are obtained by a preceding slash (/)."
  ("t" ?t)
  ("d" ?d)
  ("k" ?k)
- ("g" ?g)
+ ("g" ?ɡ)
  ("f" ?f)
  ("v" ?v)
  ("th" ?θ)
@@ -87,6 +87,7 @@ Upside-down characters are obtained by a preceding slash (/)."
  ("s" ?s)
  ("z" ?z)
  ("sh" ?ʃ)
+ ("tsh" ["ʧ" "tʃ" "t⁀ʃ"])
  ("zh" ?ʒ)
  ("3" ?ʒ)
  ("c," ?ç)
@@ -112,7 +113,7 @@ Upside-down characters are obtained by a preceding slash (/)."
  (":" ?ː))
 
 (quail-define-package
- "kirshenbaum-ipa" "IPA" "IPA-K" t
+ "ipa-kirshenbaum" "IPA" "IPA-K" t
  "The International Phonetic Alphabet, using Kirshenbaum ASCII translit.
 
 Kirshenbaum IPA is an ASCII transliteration of the phonetic alphabet, common
@@ -128,6 +129,7 @@ Unicode diacritics on reading and emitting them, it displays them,
 incorrectly, as separate from the modified glyphs.")
 
 (quail-define-rules
+ ("g" "ɡ")    ;; Voiced velar plosive                 U+0261
  ("r" "ɹ")    ;; Alveolar approximant                 U+0279
  ("A" "ɑ")    ;; Low back unrounded vowel             U+0251
  ("B" "β")    ;; Voiced bilabial fricative            U+03B2
@@ -149,8 +151,11 @@ incorrectly, as separate from the modified glyphs.")
  ("R" ["ʀ"    ;; Alveolar trill                       U+0280
        "ɚ"])    ;; Rhotacised schwa                   U+025A
  ("@<r>" "ɚ") ;; Mid central rhotacised vowel         U+025A
- ("S" "ʃ")    ;; Voiced postalveolar fricative        U+0283
- ("T" "θ")    ;; Voiced dental fricative              U+03B8
+ ("S" "ʃ")    ;; Voiceless postalveolar fricative     U+0283
+ ("tS" ["ʧ"   ;; Voiceless postalveolar affricate     U+02A7
+       "tʃ"   ;;                               U+0074 U+0283
+       "t⁀ʃ"]) ;;                        U+0074 U+2040 U+0283
+ ("T" "θ")    ;; Voiceless dental fricative           U+03B8
  ("U" "ʊ")    ;; Semi-high back rounded vowel         U+028A
  ("V" "ʌ")    ;; Low-mid back unrounded vowel         U+028C
  ("W" "œ")    ;; Low-mid front rounded vowel          U+0153
@@ -241,6 +246,19 @@ incorrectly, as separate from the modified glyphs.")
  ("o-" "ɤ")   ;; Upper-mid back unrounded vowel       U+0264
  ("A." "ɒ"))  ;; Lower back rounded vowel             U+0252
 
+
+(defconst ipa-x-sampa-implosive-submap
+  '(("b_<"   ?ɓ)   ;; Voiced bilabial implosive U+0253
+    ("d_<"   ?ɗ)   ;; Voiced alveolar implosive U+0257
+    ("g_<"   ?ɠ)   ;; Voiced velar implosive    U+0260
+    ("G\\_<" ?ʛ)   ;; Voiced uvular implosive   U+029B
+    ("J\\_<" ?ʄ))  ;; Voiced palatal implosive  U+0284
+  "A map from the X-SAMPA for some implosive consonants to characters.
+This is used because their X-SAMPA syntax is quasi-diacritic, but the
+corresponding Unicode characters themselves don't have diacritics, they are
+separate code points.  So we need to implement some extra logic that isn't
+normally provided by Quail.")
+
 ;; On XEmacs, with the supplied X-SAMPA data, this function is capably
 ;; implemented with:
 ;;
@@ -248,7 +266,7 @@ incorrectly, as separate from the modified glyphs.")
 ;;
 ;; Supporting GNU Emacs too makes it a good deal more complicated.
 
-(defun x-sampa-prepend-to-keymap-entry (to-prepend quail-keymap)
+(defun ipa-x-sampa-prepend-to-keymap-entry (to-prepend quail-keymap)
   "Return QUAIL-KEYMAP with TO-PREPEND at the beginning of each result.
 
 QUAIL-KEYMAP is a cons that satisfies `quail-map-p'; TO-PREPEND is a
@@ -270,7 +288,7 @@ string."
                        (if (integerp entry) (string entry) entry)))
           quail-keymap))))
 
-(defun x-sampa-underscore-implosive (input-string length)
+(defun ipa-x-sampa-underscore-implosive (input-string length)
   "Return keymap with IPA implosives, for INPUT-STRING, length LENGTH.
 
 The implosive consonants in X-SAMPA are represented with more or less a
@@ -290,7 +308,7 @@ particular sequence of keys, and the result will be cached by Quail."
         (pre-underscore (car split-input))
         (pre-underscore-map (quail-lookup-key pre-underscore))
         (x-sampa-submap-entry
-         (assoc (format "%s<" input-string) x-sampa-implosive-submap))
+         (assoc (format "%s<" input-string) ipa-x-sampa-implosive-submap))
         underscore-map-entry)
     (if (and (consp pre-underscore-map) (car pre-underscore-map))
        (setq pre-underscore-map (car pre-underscore-map))
@@ -301,12 +319,12 @@ particular sequence of keys, and the result will be cached by Quail."
       (cond ((null underscoring))
            ((eq (length underscoring) 2)
             (setq underscore-map-entry (second underscoring))
-            (setcdr underscoring (x-sampa-prepend-to-keymap-entry
+            (setcdr underscoring (ipa-x-sampa-prepend-to-keymap-entry
                                   pre-underscore-map underscore-map-entry)))
            ((eq (length underscoring) 3)
             (setq underscore-map-entry (second (third underscoring)))
             (setcdr (third underscoring)
-                    (x-sampa-prepend-to-keymap-entry
+                    (ipa-x-sampa-prepend-to-keymap-entry
                      pre-underscore-map underscore-map-entry)))
            (t
             (assert (null t) t
@@ -314,7 +332,7 @@ particular sequence of keys, and the result will be cached by Quail."
     (append underscore-map (list (list ?< (second x-sampa-submap-entry))))))
 
 (quail-define-package
- "x-sampa-ipa" "IPA" "IPA-X" t
+ "ipa-x-sampa" "IPA" "IPA-X" t
  "The International Phonetic Alphabet, using J.C. Wells' X-SAMPA.
 
 X-SAMPA is an ASCII transliteration of the IPA, normally used for data
@@ -325,18 +343,14 @@ with a keyboard that's limited to ASCII.
 See http://www.phon.ucl.ac.uk/home/sampa/ipasam-x.pdf for a full definition
 of the mapping. A caveat with regard to that document; while XEmacs
 currently preserves Unicode diacritics on reading and emitting them, it
-displays them, incorrectly, as separate from the modified glyphs." nil t t)
+displays them, incorrectly, as separate from the modified glyphs.")
 
 (quail-define-rules
  ;; Table taken from http://en.wikipedia.org/wiki/X-SAMPA, checked with
  ;; http://www.phon.ucl.ac.uk/home/sampa/ipasam-x.pdf
 
  ("d`" "ɖ")   ;; Voiced retroflex plosive             U+0256
-
- ;; In the Wikipedia article, they list ASCII g as mapping to U+0261, LATIN
- ;; SMALL LETTER SCRIPT G. The typeset g is equally acceptable as the voiced
- ;; velar plosive, however, and we don't override the identity mapping here.
-
+ ("g" "ɡ")    ;; Voiced velar plosive                 U+0261
  ("h\\" "ɦ")  ;; Voiced glottal fricative             U+0266
  ("j\\" "ʝ")  ;; Voiced palatal fricative             U+029D
  ("l`" "ɭ")   ;; Retroflex lateral approximant        U+026D
@@ -383,6 +397,9 @@ displays them, incorrectly, as separate from the modified glyphs." nil t t)
  ("R" "ʁ")    ;; Voiced uvular fricative              U+0281
  ("R\\" "ʀ")  ;; Uvular trill                         U+0280
  ("S" "ʃ")    ;; Voiceless postalveolar fricative     U+0283
+ ("tS" ["ʧ"   ;; Voiceless postalveolar affricate     U+02A7
+       "tʃ"   ;;                               U+0074 U+0283
+       "t⁀ʃ"]) ;;                        U+0074 U+2040 U+0283
  ("T" "θ")    ;; Voiceless dental fricative           U+03B8
  ("U" "ʊ")    ;; Near-close near-back rounded vowel   U+028A
  ("U\\" ["ʊ̵"])      ;; Central lax close rounded vowel, U+028A U+0335
@@ -488,28 +505,16 @@ displays them, incorrectly, as separate from the modified glyphs." nil t t)
  ("_X" "̆")   ;; Extra-short                          U+0306
  ("_x" "̽"))  ;; Mid-centralised                      U+033D
 
-(defconst x-sampa-implosive-submap
-  '(("b_<"   ?ɓ)   ;; Voiced bilabial implosive U+0253
-    ("d_<"   ?ɗ)   ;; Voiced alveolar implosive U+0257
-    ("g_<"   ?ɠ)   ;; Voiced velar implosive    U+0260
-    ("G\\_<" ?ʛ)   ;; Voiced uvular implosive   U+029B
-    ("J\\_<" ?ʄ))  ;; Voiced palatal implosive  U+0284
-  "A map from the X-SAMPA for some implosive consonants to characters.
-This is used because their X-SAMPA syntax is quasi-diacritic, but the
-corresponding Unicode characters themselves don't have diacritics, they are
-separate code points.  So we need to implement some extra logic that isn't
-normally provided by Quail.")
-
 ;; Putting in place rules for the implosives like for the others above
 ;; breaks the "_<diacritic>" rules for b, d, g, G and J a little--you need
 ;; to interrupt Quail before typing the underscore if you want the
 ;; diacritic. To avoid this, handle the input specially with the function
-;; x-sampa-underscore-implosive.
+;; ipa-x-sampa-underscore-implosive.
 
-(dolist (implosive-x-sampa (mapcar 'car x-sampa-implosive-submap))
+(dolist (implosive-x-sampa (mapcar 'car ipa-x-sampa-implosive-submap))
   (setq implosive-x-sampa (car (split-string implosive-x-sampa "_")))
   (quail-defrule (format "%s_" implosive-x-sampa)
-                'x-sampa-underscore-implosive))
+                'ipa-x-sampa-underscore-implosive))
 
 ;; arch-tag: cf2614cc-ecce-4ef5-ba51-37faeed41691
 ;;; ipa.el ends here