emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Additional symbols to input method TeX


From: Stefan Monnier
Subject: Re: Additional symbols to input method TeX
Date: Sun, 08 Apr 2012 22:54:26 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.0.94 (gnu/linux)

> I use the TeX input method quite often, especially when writing mails
> with math.  I find the following addition to latin-ltx.el rather useful:

I've installed the change below which generates part of the latin-ltx
table automatically from the Unicode table.  The entries you suggest
were added as a side-effect.


        Stefan


=== modified file 'leim/quail/latin-ltx.el'
--- leim/quail/latin-ltx.el     2012-01-19 07:21:25 +0000
+++ leim/quail/latin-ltx.el     2012-04-09 02:50:17 +0000
@@ -42,484 +42,264 @@
  '(("\t" . quail-completion))
  t t nil nil nil nil nil nil nil t)
 
-(quail-define-rules
+(eval-when-compile
+  (defun latin-ltx--ascii-p (char)
+    (and (characterp char) (< char 128)))
+
+  (defmacro latin-ltx--define-rules (&rest rules)
+    (load "uni-name")
+    (let ((newrules ()))
+      (dolist (rule rules)
+        (pcase rule
+          (`(,_ ,(pred characterp)) (push rule newrules)) ;; Normal quail rule.
+          (`(,seq ,re)
+           (let ((count 0))
+             (dolist (pair (ucs-names))
+               (let ((name (car pair))
+                     (char (cdr pair)))
+                 (when (and (characterp char) ;; Ignore char-ranges.
+                            (string-match re name))
+                   (let ((keys (if (stringp seq)
+                                   (replace-match seq nil nil name)
+                                 (funcall seq name char))))
+                     (if (listp keys)
+                         (dolist (x keys)
+                           (setq count (1+ count))
+                           (push (list x char) newrules))
+                       (setq count (1+ count))
+                       (push (list keys char) newrules))))))
+             (message "latin-ltx: %d mapping for %S" count re)))))
+      `(quail-define-rules ,@(nreverse (delete-dups newrules))))))
+
+(latin-ltx--define-rules
  ("!`" ?¡)
  ("\\pounds" ?£) ;; ("{\\pounds}" ?£)
  ("\\S" ?§) ;; ("{\\S}" ?§)
- ("\\\"{}" ?¨)
- ("\\copyright" ?©) ;; ("{\\copyright}" ?©)
  ("$^a$" ?ª)
- ("\\={}" ?¯)
  ("$\\pm$" ?±) ("\\pm" ?±)
  ("$^2$" ?²)
  ("$^3$" ?³)
- ("\\'{}" ?´)
  ("\\P" ?¶) ;; ("{\\P}" ?¶)
  ;; Fixme: Yudit has the equivalent of ("\\cdot" ?⋅), for U+22C5, DOT
  ;; OPERATOR, whereas · is MIDDLE DOT.  JadeTeX translates both to
  ;; \cdot.
  ("$\\cdot$" ?·) ("\\cdot" ?·)
- ("\\c{}" ?¸)
  ("$^1$" ?¹)
  ("$^o$" ?º)
  ("?`" ?¿)
 
- ("\\`{A}" ?À)  ("\\`A" ?À)
- ("\\'{A}" ?Á)  ("\\'A" ?Á)
- ("\\^{A}" ?Â)  ("\\^A" ?Â)
- ("\\~{A}" ?Ã)  ("\\~A" ?Ã)
- ("\\\"{A}" ?Ä)  ("\\\"A" ?Ä)
- ("\\\k{A}" ?Ą)
+ ("\\`" ?̀)
+ ("\\`{}" ?`)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\`{%s}" c) (format "\\`%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH GRAVE")
+
+ ("\\'" ?́)
+ ("\\'{}" ?´)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\'{%s}" c) (format "\\'%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH ACUTE")
+
+ ("\\^" ?̂)
+ ("\\^{}" ?^)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\^{%s}" c) (format "\\^%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH CIRCUMFLEX")
+
+ ("\\~" ?̃)
+ ("\\~{}" ?˜)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\~{%s}" c) (format "\\~%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH TILDE")
+
+ ("\\\"" ?̈)
+ ("\\\"{}" ?¨)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\\"{%s}" c) (format "\\\"%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DIAERESIS")
+
+ ("\\k" ?̨)
+ ("\\k{}" ?˛)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\k{%s}" c) ;; (format "\\k%s" c)
+            )))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH OGONEK")
+
+ ("\\c" ?̧)
+ ("\\c{}" ?¸)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\c{%s}" c) (format "\\c%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH CEDILLA")
+
  ("\\AA" ?Å) ;; ("{\\AA}" ?Å)
  ("\\AE" ?Æ) ;; ("{\\AE}" ?Æ)
- ("\\c{C}" ?Ç)  ("\\cC" ?Ç)
- ("\\`{E}" ?È)  ("\\`E" ?È)
- ("\\'{E}" ?É)  ("\\'E" ?É)
- ("\\^{E}" ?Ê)  ("\\^E" ?Ê)
- ("\\\"{E}" ?Ë)  ("\\\"E" ?Ë)
- ("\\\k{E}" ?Ę)
- ("\\`{I}" ?Ì)  ("\\`I" ?Ì)
- ("\\'{I}" ?Í)  ("\\'I" ?Í)
- ("\\^{I}" ?Î)  ("\\^I" ?Î)
- ("\\\"{I}" ?Ï)  ("\\\"I" ?Ï)
- ("\\\k{I}" ?Į)
-
- ("\\~{N}" ?Ñ)  ("\\~N" ?Ñ)
- ("\\`{O}" ?Ò)  ("\\`O" ?Ò)
- ("\\'{O}" ?Ó)  ("\\'O" ?Ó)
- ("\\^{O}" ?Ô)  ("\\^O" ?Ô)
- ("\\~{O}" ?Õ)  ("\\~O" ?Õ)
- ("\\\"{O}" ?Ö)  ("\\\"O" ?Ö)
- ("\\\k{O}" ?Ǫ)
+
  ("$\\times$" ?×) ("\\times" ?×)
  ("\\O" ?Ø) ;; ("{\\O}" ?Ø)
- ("\\`{U}" ?Ù) ("\\`U" ?Ù)
- ("\\'{U}" ?Ú) ("\\'U" ?Ú)
- ("\\^{U}" ?Û) ("\\^U" ?Û)
- ("\\\"{U}" ?Ü) ("\\\"U" ?Ü)
- ("\\\k{U}" ?Ų)
- ("\\'{Y}" ?Ý) ("\\'Y" ?Ý)
  ("\\ss" ?ß) ;; ("{\\ss}" ?ß)
 
- ("\\`{a}" ?à) ("\\`a" ?à)
- ("\\'{a}" ?á) ("\\'a" ?á)
- ("\\^{a}" ?â) ("\\^a" ?â)
- ("\\~{a}" ?ã) ("\\~a" ?ã)
- ("\\\"{a}" ?ä) ("\\\"a" ?ä)
- ("\\\k{a}" ?ą)
  ("\\aa" ?å) ;; ("{\\aa}" ?å)
  ("\\ae" ?æ) ;; ("{\\ae}" ?æ)
- ("\\c{c}" ?ç) ("\\cc" ?ç)
- ("\\`{e}" ?è) ("\\`e" ?è)
- ("\\'{e}" ?é) ("\\'e" ?é)
- ("\\^{e}" ?ê) ("\\^e" ?ê)
- ("\\\"{e}" ?ë) ("\\\"e" ?ë)
- ("\\\k{e}" ?ę)
- ("\\`{\\i}" ?ì)  ("\\`i" ?ì)
- ("\\'{\\i}" ?í)  ("\\'i" ?í)
- ("\\^{\\i}" ?î) ("\\^i" ?î)
- ("\\\"{\\i}" ?ï) ("\\\"i" ?ï)
- ("\\\k{i}" ?į)
-
- ("\\~{n}" ?ñ) ("\\~n" ?ñ)
- ("\\`{o}" ?ò) ("\\`o" ?ò)
- ("\\'{o}" ?ó) ("\\'o" ?ó)
- ("\\^{o}" ?ô) ("\\^o" ?ô)
- ("\\~{o}" ?õ) ("\\~o" ?õ)
- ("\\\"{o}" ?ö) ("\\\"o" ?ö)
- ("\\\k{o}" ?ǫ)
+
  ("$\\div$" ?÷) ("\\div" ?÷)
  ("\\o" ?ø) ;; ("{\\o}" ?ø)
- ("\\`{u}" ?ù) ("\\`u" ?ù)
- ("\\'{u}" ?ú) ("\\'u" ?ú)
- ("\\^{u}" ?û) ("\\^u" ?û)
- ("\\\"{u}" ?ü) ("\\\"u" ?ü)
- ("\\\k{u}" ?ų)
- ("\\'{y}" ?ý) ("\\'y" ?ý)
- ("\\\"{y}" ?ÿ) ("\\\"y" ?ÿ)
-
- ("\\={A}" ?Ā) ("\\=A" ?Ā)
- ("\\={a}" ?ā) ("\\=a" ?ā)
- ("\\u{A}" ?Ă) ("\\uA" ?Ă)
- ("\\u{a}" ?ă) ("\\ua" ?ă)
- ("\\'{C}" ?Ć) ("\\'C" ?Ć)
- ("\\'{c}" ?ć) ("\\'c" ?ć)
- ("\\^{C}" ?Ĉ) ("\\^C" ?Ĉ)
- ("\\^{c}" ?ĉ) ("\\^c" ?ĉ)
- ("\\.{C}" ?Ċ) ("\\.C" ?Ċ)
- ("\\.{c}" ?ċ) ("\\.c" ?ċ)
- ("\\v{C}" ?Č) ("\\vC" ?Č)
- ("\\v{c}" ?č) ("\\vc" ?č)
- ("\\v{D}" ?Ď) ("\\vD" ?Ď)
- ("\\v{d}" ?ď) ("\\vd" ?ď)
-
- ("\\={E}" ?Ē) ("\\=E" ?Ē)
- ("\\={e}" ?ē) ("\\=e" ?ē)
- ("\\u{E}" ?Ĕ) ("\\uE" ?Ĕ)
- ("\\u{e}" ?ĕ) ("\\ue" ?ĕ)
- ("\\.{E}" ?Ė) ("\\.E" ?Ė)
- ("\\e{e}" ?ė) ("\\ee" ?ė)
- ("\\v{E}" ?Ě) ("\\vE" ?Ě)
- ("\\v{e}" ?ě) ("\\ve" ?ě)
- ("\\^{G}" ?Ĝ) ("\\^G" ?Ĝ)
- ("\\^{g}" ?ĝ) ("\\^g" ?ĝ)
- ("\\u{G}" ?Ğ) ("\\uG" ?Ğ)
- ("\\u{g}" ?ğ) ("\\ug" ?ğ)
-
- ("\\.{G}" ?Ġ) ("\\.G" ?Ġ)
- ("\\.{g}" ?ġ) ("\\.g" ?ġ)
- ("\\c{G}" ?Ģ) ("\\cG" ?Ģ)
- ("\\c{g}" ?ģ) ("\\cg" ?ģ)
- ("\\^{H}" ?Ĥ) ("\\^H" ?Ĥ)
- ("\\^{h}" ?ĥ) ("\\^h" ?ĥ)
- ("\\~{I}" ?Ĩ) ("\\~I" ?Ĩ)
- ("\\~{\\i}" ?ĩ) ("\\~i" ?ĩ)
- ("\\={I}" ?Ī) ("\\=I" ?Ī)
- ("\\={\\i}" ?ī) ("\\=i" ?ī)
- ("\\u{I}" ?Ĭ) ("\\uI" ?Ĭ)
- ("\\u{\\i}" ?ĭ) ("\\ui" ?ĭ)
 
- ("\\.{I}" ?İ) ("\\.I" ?İ)
+ ("\\=" ?̄)
+ ("\\={}" ?¯)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\={%s}" c) (format "\\=%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH MACRON")
+
+ ("\\u" ?̆)
+ ("\\u{}" ?˘)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\u{%s}" c) (format "\\u%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH BREVE")
+
+ ("\\." ?̇)
+ ("\\.{}" ?˙)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\.{%s}" c) (format "\\.%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DOT ABOVE")
+
+ ("\\v" ?̌)
+ ("\\v{}" ?ˇ)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\v{%s}" c) (format "\\v%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH CARON")
+
+ ("\\~{\\i}" ?ĩ)
+ ("\\={\\i}" ?ī)
+ ("\\u{\\i}" ?ĭ)
+
  ("\\i" ?ı) ;; ("{\\i}" ?ı)
- ("\\^{J}" ?Ĵ) ("\\^J" ?Ĵ)
- ("\\^{\\j}" ?ĵ) ("\\^j" ?ĵ)
- ("\\c{K}" ?Ķ) ("\\cK" ?Ķ)
- ("\\c{k}" ?ķ) ("\\ck" ?ķ)
- ("\\'{L}" ?Ĺ) ("\\'L" ?Ĺ)
- ("\\'{l}" ?ĺ) ("\\'l" ?ĺ)
- ("\\c{L}" ?Ļ) ("\\cL" ?Ļ)
- ("\\c{l}" ?ļ) ("\\cl" ?ļ)
+ ("\\^{\\j}" ?ĵ)
 
  ("\\L" ?Ł) ;; ("{\\L}" ?Ł)
  ("\\l" ?ł) ;; ("{\\l}" ?ł)
- ("\\'{N}" ?Ń) ("\\'N" ?Ń)
- ("\\'{n}" ?ń) ("\\'n" ?ń)
- ("\\c{N}" ?Ņ) ("\\cN" ?Ņ)
- ("\\c{n}" ?ņ) ("\\cn" ?ņ)
- ("\\v{N}" ?Ň) ("\\vN" ?Ň)
- ("\\v{n}" ?ň) ("\\vn" ?ň)
- ("\\={O}" ?Ō) ("\\=O" ?Ō)
- ("\\={o}" ?ō) ("\\=o" ?ō)
- ("\\u{O}" ?Ŏ) ("\\uO" ?Ŏ)
- ("\\u{o}" ?ŏ) ("\\uo" ?ŏ)
 
- ("\\H{O}" ?Ő) ("\\HO" ?Ő)
- ("\\U{o}" ?ő) ("\\Uo" ?ő)
+ ("\\H" ?̋)
+ ("\\H{}" ?˝)
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\H{%s}" c) (format "\\H%s" c))))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DOUBLE ACUTE")
+ ("\\U{o}" ?ő) ("\\Uo" ?ő) ;; FIXME: Was it just a typo?
+ 
  ("\\OE" ?Œ) ;; ("{\\OE}" ?Œ)
  ("\\oe" ?œ) ;; ("{\\oe}" ?œ)
- ("\\'{R}" ?Ŕ) ("\\'R" ?Ŕ)
- ("\\'{r}" ?ŕ) ("\\'r" ?ŕ)
- ("\\c{R}" ?Ŗ) ("\\cR" ?Ŗ)
- ("\\c{r}" ?ŗ) ("\\cr" ?ŗ)
- ("\\v{R}" ?Ř) ("\\vR" ?Ř)
- ("\\v{r}" ?ř) ("\\vr" ?ř)
- ("\\'{S}" ?Ś) ("\\'S" ?Ś)
- ("\\'{s}" ?ś) ("\\'s" ?ś)
- ("\\^{S}" ?Ŝ) ("\\^S" ?Ŝ)
- ("\\^{s}" ?ŝ) ("\\^s" ?ŝ)
- ("\\c{S}" ?Ş) ("\\cS" ?Ş)
- ("\\c{s}" ?ş) ("\\cs" ?ş)
-
- ("\\v{S}" ?Š) ("\\vS" ?Š)
- ("\\v{s}" ?š) ("\\vs" ?š)
- ("\\c{T}" ?Ţ) ("\\cT" ?Ţ)
- ("\\c{t}" ?ţ) ("\\ct" ?ţ)
- ("\\v{T}" ?Ť) ("\\vT" ?Ť)
- ("\\v{t}" ?ť) ("\\vt" ?ť)
- ("\\~{U}" ?Ũ) ("\\~U" ?Ũ)
- ("\\~{u}" ?ũ) ("\\~u" ?ũ)
- ("\\={U}" ?Ū) ("\\=U" ?Ū)
- ("\\={u}" ?ū) ("\\=u" ?ū)
- ("\\u{U}" ?Ŭ) ("\\uU" ?Ŭ)
- ("\\u{u}" ?ŭ) ("\\uu" ?ŭ)
-
- ("\\H{U}" ?Ű) ("\\HU" ?Ű)
- ("\\H{u}" ?ű) ("\\Hu" ?ű)
- ("\\^{W}" ?Ŵ) ("\\^W" ?Ŵ)
- ("\\^{w}" ?ŵ) ("\\^w" ?ŵ)
- ("\\^{Y}" ?Ŷ) ("\\^Y" ?Ŷ)
- ("\\^{y}" ?ŷ) ("\\^y" ?ŷ)
- ("\\\"{Y}" ?Ÿ) ("\\\"Y" ?Ÿ)
- ("\\'{Z}" ?Ź) ("\\'Z" ?Ź)
- ("\\'{z}" ?ź) ("\\'z" ?ź)
- ("\\.{Z}" ?Ż) ("\\.Z" ?Ż)
- ("\\.{z}" ?ż) ("\\.z" ?ż)
- ("\\v{Z}" ?Ž) ("\\vZ" ?Ž)
- ("\\v{z}" ?ž) ("\\vz" ?ž)
-
- ("\\v{A}" ?Ǎ) ("\\vA" ?Ǎ)
- ("\\v{a}" ?ǎ) ("\\va" ?ǎ)
- ("\\v{I}" ?Ǐ) ("\\vI" ?Ǐ)
- ("\\v{\\i}" ?ǐ) ("\\vi" ?ǐ)
- ("\\v{O}" ?Ǒ) ("\\vO" ?Ǒ)
- ("\\v{o}" ?ǒ) ("\\vo" ?ǒ)
- ("\\v{U}" ?Ǔ) ("\\vU" ?Ǔ)
- ("\\v{u}" ?ǔ) ("\\vu" ?ǔ)
+
+ ("\\v{\\i}" ?ǐ)
 
  ("\\={\\AE}" ?Ǣ) ("\\=\\AE" ?Ǣ)
  ("\\={\\ae}" ?ǣ) ("\\=\\ae" ?ǣ)
- ("\\v{G}" ?Ǧ) ("\\vG" ?Ǧ)
- ("\\v{g}" ?ǧ) ("\\vg" ?ǧ)
- ("\\v{K}" ?Ǩ) ("\\vK" ?Ǩ)
- ("\\v{k}" ?ǩ) ("\\vk" ?ǩ)
-
- ("\\v{\\j}" ?ǰ) ("\\vj" ?ǰ)
- ("\\'{G}" ?Ǵ) ("\\'G" ?Ǵ)
- ("\\'{g}" ?ǵ) ("\\'g" ?ǵ)
- ("\\`{N}" ?Ǹ) ("\\`N" ?Ǹ)
- ("\\`{n}" ?ǹ) ("\\`n" ?ǹ)
+
+ ("\\v{\\j}" ?ǰ)
  ("\\'{\\AE}" ?Ǽ) ("\\'\\AE" ?Ǽ)
  ("\\'{\\ae}" ?ǽ) ("\\'\\ae" ?ǽ)
  ("\\'{\\O}" ?Ǿ) ("\\'\\O" ?Ǿ)
  ("\\'{\\o}" ?ǿ) ("\\'\\o" ?ǿ)
 
- ("\\v{H}" ?Ȟ) ("\\vH" ?Ȟ)
- ("\\v{h}" ?ȟ) ("\\vh" ?ȟ)
- ("\\.{A}" ?Ȧ) ("\\.A" ?Ȧ)
- ("\\.{a}" ?ȧ) ("\\.a" ?ȧ)
- ("\\c{E}" ?Ȩ) ("\\cE" ?Ȩ)
- ("\\c{e}" ?ȩ) ("\\ce" ?ȩ)
- ("\\.{O}" ?Ȯ) ("\\.O" ?Ȯ)
- ("\\.{o}" ?ȯ) ("\\.o" ?ȯ)
- ("\\={Y}" ?Ȳ) ("\\=Y" ?Ȳ)
- ("\\={y}" ?ȳ) ("\\=y" ?ȳ)
-
- ("\\v{}" ?ˇ)
- ("\\u{}" ?˘)
- ("\\.{}" ?˙)
- ("\\~{}" ?˜)
- ("\\H{}" ?˝)
-
- ("\\'" ?́)
- ("\\'K" ?Ḱ)
- ("\\'M" ?Ḿ)
- ("\\'P" ?Ṕ)
- ("\\'W" ?Ẃ)
- ("\\'k" ?ḱ)
- ("\\'m" ?ḿ)
- ("\\'p" ?ṕ)
- ("\\'w" ?ẃ)
  ("\\," ? )
- ("\\." ?̇)
- ("\\.B" ?Ḃ)
- ("\\.D" ?Ḋ)
- ("\\.F" ?Ḟ)
- ("\\.H" ?Ḣ)
- ("\\.M" ?Ṁ)
- ("\\.N" ?Ṅ)
- ("\\.P" ?Ṗ)
- ("\\.R" ?Ṙ)
- ("\\.S" ?Ṡ)
- ("\\.T" ?Ṫ)
- ("\\.W" ?Ẇ)
- ("\\.X" ?Ẋ)
- ("\\.Y" ?Ẏ)
- ("\\.b" ?ḃ)
- ("\\.d" ?ḋ)
- ("\\.e" ?ė)
- ("\\.f" ?ḟ)
- ("\\.h" ?ḣ)
- ("\\.m" ?ṁ)
- ("\\.n" ?ṅ)
- ("\\.p" ?ṗ)
- ("\\.r" ?ṙ)
- ("\\.s" ?ṡ)
- ("\\.t" ?ṫ)
- ("\\.w" ?ẇ)
- ("\\.x" ?ẋ)
- ("\\.y" ?ẏ)
  ("\\/" ?‌)
  ("\\:" ? )
  ("\\;" ? )
- ("\\=" ?̄)
- ("\\=G" ?Ḡ)
- ("\\=g" ?ḡ)
 
- ("^(" ?⁽)
- ("^)" ?⁾)
- ("^+" ?⁺)
- ("^-" ?⁻)
- ("^0" ?⁰)
- ("^1" ?¹)
- ("^2" ?²)
- ("^3" ?³)
- ("^4" ?⁴)
- ("^5" ?⁵)
- ("^6" ?⁶)
- ("^7" ?⁷)
- ("^8" ?⁸)
- ("^9" ?⁹)
- ("^=" ?⁼)
+ ((lambda (name char)
+    (let* ((base (concat (match-string 1 name) (match-string 3 name)))
+           (basechar (cdr (assoc base (ucs-names)))))
+      (when (latin-ltx--ascii-p basechar)
+        (string (if (match-end 2) ?^ ?_) basechar))))
+  "\\(.*\\)SU\\(?:B\\|\\(PER\\)\\)SCRIPT \\(.*\\)")
+
  ("^\\gamma" ?ˠ)
- ;; FIXME: It'd be nicer to generate some of these rules via something like
- ;; (map (lambda (name char)
- ;;        (cond ((string-match "MODIFIER SMALL LETTER \\(.\\)" name)
- ;;               (list (string ?^ (downcase (aref name (match-beginning 1))))
- ;;                     char)))
- ;;              ...)))
- ("^a" ?ᵃ)
- ("^b" ?ᵇ)
- ("^c" ?ᶜ)
- ("^d" ?ᵈ)
- ("^e" ?ᵉ)
- ("^f" ?ᶠ)
- ("^g" ?ᵍ)
- ("^h" ?ʰ)
- ;; ("^i" ?)  ;; FIXME: can't find MODIFIER SMALL LETTER I  !?!
- ("^j" ?ʲ)
- ("^k" ?ᵏ)
- ("^l" ?ˡ)
- ("^m" ?ᵐ)
- ("^n" ?ⁿ)
- ("^o" ?ᵒ)
+
+ ((lambda (name char)
+    (let* ((base (format "LATIN %s LETTER %s"
+                         (match-string 1 name) (match-string 2 name)))
+           (basechar (cdr (assoc base (ucs-names)))))
+      (when (latin-ltx--ascii-p basechar)
+        (string ?^ basechar))))
+  "MODIFIER LETTER \\(SMALL\\|CAPITAL\\) \\(.*\\)")
+ 
+ ;; ((lambda (name char) (format "^%s" (downcase (match-string 1 name))))
+ ;;  "\\`MODIFIER LETTER SMALL \\(.\\)\\'")
+ ;; ("^\\1" "\\`MODIFIER LETTER CAPITAL \\(.\\)\\'")
  ("^o_" ?º)
- ("^p" ?ᵖ)
- ;; ("^q" ?)  ;; FIXME: can't find MODIFIER SMALL LETTER Q  !?!
- ("^r" ?ʳ)
- ("^s" ?ˢ)
- ("^t" ?ᵗ)
- ("^u" ?ᵘ)
- ("^v" ?ᵛ)
- ("^w" ?ʷ)
- ("^x" ?ˣ)
- ("^y" ?ʸ)
- ("^z" ?ᶻ)
- ("^A" ?ᴬ)
- ("^B" ?ᴮ)
- ;; ("^C" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER C  !?!
- ("^D" ?ᴰ)
- ("^E" ?ᴱ)
- ;; ("^F" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER F  !?!
- ("^G" ?ᴳ)
- ("^H" ?ᴴ)
- ("^I" ?ᴵ)
- ("^J" ?ᴶ)
- ("^K" ?ᴷ)
- ("^L" ?ᴸ)
- ("^M" ?ᴹ)
- ("^N" ?ᴺ)
- ("^O" ?ᴼ)
- ("^P" ?ᴾ)
- ;; ("^Q" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER Q  !?!
- ("^R" ?ᴿ)
- ;; ("^S" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER S  !?!
- ("^T" ?ᵀ)
- ("^U" ?ᵁ)
- ("^V" ?ⱽ)
- ("^W" ?ᵂ)
- ;; ("^X" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER X  !?!
- ;; ("^Y" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER Y  !?!
- ;; ("^Z" ?)  ;; FIXME: can't find MODIFIER CAPITAL LETTER Z  !?!
  ("^{SM}" ?℠)
  ("^{TEL}" ?℡)
  ("^{TM}" ?™)
- ("_(" ?₍)
- ("_)" ?₎)
- ("_+" ?₊)
- ("_-" ?₋)
- ("_0" ?₀)
- ("_1" ?₁)
- ("_2" ?₂)
- ("_3" ?₃)
- ("_4" ?₄)
- ("_5" ?₅)
- ("_6" ?₆)
- ("_7" ?₇)
- ("_8" ?₈)
- ("_9" ?₉)
- ("_=" ?₌)
-
- ("\\~" ?̃)
- ("\\~E" ?Ẽ)
- ("\\~V" ?Ṽ)
- ("\\~Y" ?Ỹ)
- ("\\~e" ?ẽ)
- ("\\~v" ?ṽ)
- ("\\~y" ?ỹ)
 
- ("\\\"" ?̈)
- ("\\\"H" ?Ḧ)
- ("\\\"W" ?Ẅ)
- ("\\\"X" ?Ẍ)
- ("\\\"h" ?ḧ)
- ("\\\"t" ?ẗ)
- ("\\\"w" ?ẅ)
- ("\\\"x" ?ẍ)
- ("\\^" ?̂)
- ("\\^Z" ?Ẑ)
- ("\\^z" ?ẑ)
- ("\\`" ?̀)
- ("\\`W" ?Ẁ)
- ("\\`Y" ?Ỳ)
- ("\\`w" ?ẁ)
- ("\\`y" ?ỳ)
  ("\\b" ?̱)
- ("\\c" ?̧)
- ("\\c{D}" ?Ḑ)
- ("\\c{H}" ?Ḩ)
- ("\\c{d}" ?ḑ)
- ("\\c{h}" ?ḩ)
+
  ("\\d" ?̣)
- ("\\d{A}" ?Ạ)
- ("\\d{B}" ?Ḅ)
- ("\\d{D}" ?Ḍ)
- ("\\d{E}" ?Ẹ)
- ("\\d{H}" ?Ḥ)
- ("\\d{I}" ?Ị)
- ("\\d{K}" ?Ḳ)
- ("\\d{L}" ?Ḷ)
- ("\\d{M}" ?Ṃ)
- ("\\d{N}" ?Ṇ)
- ("\\d{O}" ?Ọ)
- ("\\d{R}" ?Ṛ)
- ("\\d{S}" ?Ṣ)
- ("\\d{T}" ?Ṭ)
- ("\\d{U}" ?Ụ)
- ("\\d{V}" ?Ṿ)
- ("\\d{W}" ?Ẉ)
- ("\\d{Y}" ?Ỵ)
- ("\\d{Z}" ?Ẓ)
- ("\\d{a}" ?ạ)
- ("\\d{b}" ?ḅ)
- ("\\d{d}" ?ḍ)
- ("\\d{e}" ?ẹ)
- ("\\d{h}" ?ḥ)
- ("\\d{i}" ?ị)
- ("\\d{k}" ?ḳ)
- ("\\d{l}" ?ḷ)
- ("\\d{m}" ?ṃ)
- ("\\d{n}" ?ṇ)
- ("\\d{o}" ?ọ)
- ("\\d{r}" ?ṛ)
- ("\\d{s}" ?ṣ)
- ("\\d{t}" ?ṭ)
- ("\\d{u}" ?ụ)
- ("\\d{v}" ?ṿ)
- ("\\d{w}" ?ẉ)
- ("\\d{y}" ?ỵ)
- ("\\d{z}" ?ẓ)
+ ;; ("\\d{}" ?) ;; FIXME: can't find the DOT BELOW character.
+ ((lambda (name char)
+    (let ((c (if (match-end 1)
+                 (downcase (match-string 2 name))
+               (match-string 2 name))))
+      (list (format "\\d{%s}" c) ;; (format "\\d%s" c)
+            )))
+  "\\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH DOT BELOW")
+
  ("\\rq" ?’)
- ("\\u" ?̆)
- ("\\v" ?̌)
- ("\\v{L}" ?Ľ)
- ("\\v{i}" ?ǐ)
- ("\\v{j}" ?ǰ)
- ("\\v{l}" ?ľ)
- ("\\yen" ?¥)
+
+ ;; FIXME: Provides some useful entries (yen, euro, copyright, registered,
+ ;; currency, minus, micro), but also a lot of dubious ones.
+ ((lambda (name char)
+    (unless (latin-ltx--ascii-p char)
+      (concat "\\" (downcase (match-string 1 name)))))
+  "\\`\\([^- ]+\\) SIGN\\'")
+
+ ((lambda (name char)
+    (concat "\\" (funcall (if (match-end 1) #' capitalize #'downcase)
+                          (match-string 2 name))))
+  "\\`GREEK \\(?:SMALL\\|CAPITA\\(L\\)\\) LETTER \\([^- ]+\\)\\'")
 
  ("\\Box" ?□)
  ("\\Bumpeq" ?≎)
  ("\\Cap" ?⋒)
  ("\\Cup" ?⋓)
- ("\\Delta" ?Δ)
  ("\\Diamond" ?◇)
  ("\\Downarrow" ?⇓)
- ("\\Gamma" ?Γ)
- ("\\H" ?̋)
  ("\\H{o}" ?ő)
  ("\\Im" ?ℑ)
  ("\\Join" ?⋈)
- ("\\Lambda" ?Λ)
  ("\\Leftarrow" ?⇐)
  ("\\Leftrightarrow" ?⇔)
  ("\\Ll" ?⋘)
@@ -528,27 +308,18 @@
  ("\\Longleftrightarrow" ?⇔)
  ("\\Longrightarrow" ?⇒)
  ("\\Lsh" ?↰)
- ("\\Omega" ?Ω)
- ("\\Phi" ?Φ)
- ("\\Pi" ?Π)
- ("\\Psi" ?Ψ)
  ("\\Re" ?ℜ)
  ("\\Rightarrow" ?⇒)
  ("\\Rrightarrow" ?⇛)
  ("\\Rsh" ?↱)
- ("\\Sigma" ?Σ)
  ("\\Subset" ?⋐)
  ("\\Supset" ?⋑)
- ("\\Theta" ?Θ)
  ("\\Uparrow" ?⇑)
  ("\\Updownarrow" ?⇕)
- ("\\Upsilon" ?Υ)
  ("\\Vdash" ?⊩)
  ("\\Vert" ?‖)
  ("\\Vvdash" ?⊪)
- ("\\Xi" ?Ξ)
  ("\\aleph" ?ℵ)
- ("\\alpha" ?α)
  ("\\amalg" ?∐)
  ("\\angle" ?∠)
  ("\\approx" ?≈)
@@ -563,7 +334,6 @@
  ("\\backslash" ?\\)
  ("\\barwedge" ?⊼)
  ("\\because" ?∵)
- ("\\beta" ?β)
  ("\\beth" ?ℶ)
  ("\\between" ?≬)
  ("\\bigcap" ?⋂)
@@ -602,7 +372,7 @@
  ("\\circledcirc" ?⊚)
  ("\\circleddash" ?⊝)
  ("\\clubsuit" ?♣)
- ("\\colon" ?:)
+ ("\\colon" ?:)                         ;FIXME: Conflict with "COLON SIGN" ₡.
  ("\\coloneq" ?≔)
  ("\\complement" ?∁)
  ("\\cong" ?≅)
@@ -623,7 +393,6 @@
  ("\\ddag" ?‡)
  ("\\ddagger" ?‡)
  ("\\ddots" ?⋱)
- ("\\delta" ?δ)
  ("\\diamond" ?⋄)
  ("\\diamondsuit" ?♢)
  ("\\digamma" ?Ϝ)
@@ -638,14 +407,11 @@
  ("\\downrightharpoon" ?⇂)
  ("\\ell" ?ℓ)
  ("\\emptyset" ?∅)
- ("\\epsilon" ?ε)
  ("\\eqcirc" ?≖)
  ("\\eqcolon" ?≕)
  ("\\eqslantgtr" ?⋝)
  ("\\eqslantless" ?⋜)
  ("\\equiv" ?≡)
- ("\\eta" ?η)
- ("\\euro" ?€)
  ("\\exists" ?∃)
  ("\\fallingdotseq" ?≒)
  ("\\flat" ?♭)
@@ -667,7 +433,6 @@
  ("\\frac58" ?⅝)
  ("\\frac78" ?⅞)
  ("\\frown" ?⌢)
- ("\\gamma" ?γ)
  ("\\ge" ?≥)
  ("\\geq" ?≥)
  ("\\geqq" ?≧)
@@ -697,9 +462,6 @@
  ("\\infty" ?∞)
  ("\\int" ?∫)
  ("\\intercal" ?⊺)
- ("\\iota" ?ι)
- ("\\kappa" ?κ)
- ("\\lambda" ?λ)
  ("\\langle" ?〈)
  ("\\lbrace" ?{)
  ("\\lbrack" ?\[)
@@ -783,7 +545,7 @@
  ("\\nleqslant" ?≰)
  ("\\nless" ?≮)
  ("\\nmid" ?∤)
- ("\\not" ?̸)
+ ("\\not" ?̸)                            ;FIXME: conflict with "NOT SIGN" ¬.
  ("\\notin" ?∉)
  ("\\nparallel" ?∦)
  ("\\nprec" ?⊀)
@@ -805,13 +567,11 @@
  ("\\ntrianglelefteq" ?⋬)
  ("\\ntriangleright" ?⋫)
  ("\\ntrianglerighteq" ?⋭)
- ("\\nu" ?ν)
  ("\\nvDash" ?⊭)
  ("\\nvdash" ?⊬)
  ("\\nwarrow" ?↖)
  ("\\odot" ?⊙)
  ("\\oint" ?∮)
- ("\\omega" ?ω)
  ("\\ominus" ?⊖)
  ("\\oplus" ?⊕)
  ("\\oslash" ?⊘)
@@ -820,8 +580,6 @@
  ("\\parallel" ?∥)
  ("\\partial" ?∂)
  ("\\perp" ?⊥)
- ("\\phi" ?φ)
- ("\\pi" ?π)
  ("\\pitchfork" ?⋔)
  ("\\prec" ?≺)
  ("\\precapprox" ?≾)
@@ -832,7 +590,6 @@
  ("\\prime" ?′)
  ("\\prod" ?∏)
  ("\\propto" ?∝)
- ("\\psi" ?ψ)
  ("\\qed" ?∎)
  ("\\quad" ? )
  ("\\rangle" ?〉)
@@ -857,7 +614,6 @@
  ("\\sharp" ?♯)
  ("\\shortmid" ?∣)
  ("\\shortparallel" ?∥)
- ("\\sigma" ?σ)
  ("\\sim" ?∼)
  ("\\simeq" ?≃)
  ("\\smallamalg" ?∐)
@@ -896,9 +652,7 @@
  ("\\supsetneqq" ?⊋)
  ("\\surd" ?√)
  ("\\swarrow" ?↙)
- ("\\tau" ?τ)
  ("\\therefore" ?∴)
- ("\\theta" ?θ)
  ("\\thickapprox" ?≈)
  ("\\thicksim" ?∼)
  ("\\to" ?→)
@@ -918,19 +672,18 @@
  ("\\upleftharpoon" ?↿)
  ("\\uplus" ?⊎)
  ("\\uprightharpoon" ?↾)
- ("\\upsilon" ?υ)
  ("\\upuparrows" ?⇈)
  ("\\urcorner" ?⌝)
  ("\\u{i}" ?ĭ)
  ("\\vDash" ?⊨)
- ("\\varkappa" ?ϰ)
- ("\\varphi" ?ϕ)
- ("\\varpi" ?ϖ)
+
+ ((lambda (name char)
+    (concat "\\var" (downcase (match-string 1 name))))
+  "\\`GREEK \\([^- ]+\\) SYMBOL\\'")
+
  ("\\varprime" ?′)
  ("\\varpropto" ?∝)
- ("\\varrho" ?ϱ)
- ("\\varsigma" ?ς)
- ("\\vartheta" ?ϑ)
+ ("\\varsigma" ?ς)                     ;FIXME: Looks reversed with the non\var.
  ("\\vartriangleleft" ?⊲)
  ("\\vartriangleright" ?⊳)
  ("\\vdash" ?⊢)
@@ -941,8 +694,6 @@
  ("\\wedge" ?∧)
  ("\\wp" ?℘)
  ("\\wr" ?≀)
- ("\\xi" ?ξ)
- ("\\zeta" ?ζ)
 
  ("\\Bbb{N}" ?ℕ)                       ; AMS commands for blackboard bold
  ("\\Bbb{P}" ?ℙ)                       ; Also sometimes \mathbb.
@@ -954,8 +705,6 @@
  ;; a bug where the user finds his ~ key doesn't insert a ~ any more.
  ("\\ " ? )
  ("\\\\" ?\\)
- ("\\mu" ?μ)
- ("\\rho" ?ρ)
  ("\\mathscr{I}" ?ℐ)                   ; moment of inertia
  ("\\Smiley" ?☺)
  ("\\blacksmiley" ?☻)
@@ -980,13 +729,10 @@
  ;; ("\\Writinghand" ?✍)
  ;; ("\\Yinyang" ?☯)
  ;; ("\\Heart" ?♡)
- ("\\registered" ?®)
- ("\\currency" ?¤)
  ("\\dh" ?ð)
  ("\\DH" ?Ð)
  ("\\th" ?þ)
  ("\\TH" ?Þ)
- ("\\micro" ?µ)
  ("\\lnot" ?¬)
  ("\\ordfeminine" ?ª)
  ("\\ordmasculine" ?º)
@@ -995,7 +741,6 @@
  ;; by analogy with lq, rq:
  ("\\ldq" ?\“)
  ("\\rdq" ?\”)
- ("\\minus" ?−)
  ("\\defs" ?≙)                         ; per fuzz/zed
  ;; ("\\sqrt[3]" ?∛)
  ("\\llbracket" ?\〚)                   ; stmaryrd




reply via email to

[Prev in Thread] Current Thread [Next in Thread]