From f8f2e1d87365930455325c46f3f786caf7b5ef8c Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Sun, 8 Apr 2012 22:53:51 -0400 Subject: [PATCH] * leim/quail/latin-ltx.el: Auto-generate some of the entries. (latin-ltx--ascii-p): New function. (latin-ltx--define-rules): New macro. (define-rules): Use it. --- leim/ChangeLog | 7 + leim/quail/latin-ltx.el | 641 ++++++++++++---------------------------- 2 files changed, 200 insertions(+), 448 deletions(-) diff --git a/leim/ChangeLog b/leim/ChangeLog index ed9ff6f9270..51eb5a8a6cf 100644 --- a/leim/ChangeLog +++ b/leim/ChangeLog @@ -1,3 +1,10 @@ +2012-04-09 Stefan Monnier + + * quail/latin-ltx.el: Auto-generate some of the entries. + (latin-ltx--ascii-p): New function. + (latin-ltx--define-rules): New macro. + (define-rules): Use it. + 2012-03-25 Eli Zaretskii * makefile.w32-in (install): Use $(DIRNAME)_same-dir.tst instead diff --git a/leim/quail/latin-ltx.el b/leim/quail/latin-ltx.el index 089797c32ae..0d8ecf6303d 100644 --- a/leim/quail/latin-ltx.el +++ b/leim/quail/latin-ltx.el @@ -42,484 +42,264 @@ system, including many technical ones. Examples: '(("\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" ?ď) + ("\\=" ?̄) + ("\\={}" ?¯) + ((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") - ("\\={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" ?ğ) + ("\\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") - ("\\.{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" ?ĭ) + ("\\." ?̇) + ("\\.{}" ?˙) + ((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" ?İ) ("\\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 @@ system, including many technical ones. Examples: ("\\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 @@ system, including many technical ones. Examples: ("\\backslash" ?\\) ("\\barwedge" ?⊼) ("\\because" ?∵) - ("\\beta" ?β) ("\\beth" ?ℶ) ("\\between" ?≬) ("\\bigcap" ?⋂) @@ -602,7 +372,7 @@ system, including many technical ones. Examples: ("\\circledcirc" ?⊚) ("\\circleddash" ?⊝) ("\\clubsuit" ?♣) - ("\\colon" ?:) + ("\\colon" ?:) ;FIXME: Conflict with "COLON SIGN" ₡. ("\\coloneq" ?≔) ("\\complement" ?∁) ("\\cong" ?≅) @@ -623,7 +393,6 @@ system, including many technical ones. Examples: ("\\ddag" ?‡) ("\\ddagger" ?‡) ("\\ddots" ?⋱) - ("\\delta" ?δ) ("\\diamond" ?⋄) ("\\diamondsuit" ?♢) ("\\digamma" ?Ϝ) @@ -638,14 +407,11 @@ system, including many technical ones. Examples: ("\\downrightharpoon" ?⇂) ("\\ell" ?ℓ) ("\\emptyset" ?∅) - ("\\epsilon" ?ε) ("\\eqcirc" ?≖) ("\\eqcolon" ?≕) ("\\eqslantgtr" ?⋝) ("\\eqslantless" ?⋜) ("\\equiv" ?≡) - ("\\eta" ?η) - ("\\euro" ?€) ("\\exists" ?∃) ("\\fallingdotseq" ?≒) ("\\flat" ?♭) @@ -667,7 +433,6 @@ system, including many technical ones. Examples: ("\\frac58" ?⅝) ("\\frac78" ?⅞) ("\\frown" ?⌢) - ("\\gamma" ?γ) ("\\ge" ?≥) ("\\geq" ?≥) ("\\geqq" ?≧) @@ -697,9 +462,6 @@ system, including many technical ones. Examples: ("\\infty" ?∞) ("\\int" ?∫) ("\\intercal" ?⊺) - ("\\iota" ?ι) - ("\\kappa" ?κ) - ("\\lambda" ?λ) ("\\langle" ?〈) ("\\lbrace" ?{) ("\\lbrack" ?\[) @@ -783,7 +545,7 @@ system, including many technical ones. Examples: ("\\nleqslant" ?≰) ("\\nless" ?≮) ("\\nmid" ?∤) - ("\\not" ?̸) + ("\\not" ?̸) ;FIXME: conflict with "NOT SIGN" ¬. ("\\notin" ?∉) ("\\nparallel" ?∦) ("\\nprec" ?⊀) @@ -805,13 +567,11 @@ system, including many technical ones. Examples: ("\\ntrianglelefteq" ?⋬) ("\\ntriangleright" ?⋫) ("\\ntrianglerighteq" ?⋭) - ("\\nu" ?ν) ("\\nvDash" ?⊭) ("\\nvdash" ?⊬) ("\\nwarrow" ?↖) ("\\odot" ?⊙) ("\\oint" ?∮) - ("\\omega" ?ω) ("\\ominus" ?⊖) ("\\oplus" ?⊕) ("\\oslash" ?⊘) @@ -820,8 +580,6 @@ system, including many technical ones. Examples: ("\\parallel" ?∥) ("\\partial" ?∂) ("\\perp" ?⊥) - ("\\phi" ?φ) - ("\\pi" ?π) ("\\pitchfork" ?⋔) ("\\prec" ?≺) ("\\precapprox" ?≾) @@ -832,7 +590,6 @@ system, including many technical ones. Examples: ("\\prime" ?′) ("\\prod" ?∏) ("\\propto" ?∝) - ("\\psi" ?ψ) ("\\qed" ?∎) ("\\quad" ? ) ("\\rangle" ?〉) @@ -857,7 +614,6 @@ system, including many technical ones. Examples: ("\\sharp" ?♯) ("\\shortmid" ?∣) ("\\shortparallel" ?∥) - ("\\sigma" ?σ) ("\\sim" ?∼) ("\\simeq" ?≃) ("\\smallamalg" ?∐) @@ -896,9 +652,7 @@ system, including many technical ones. Examples: ("\\supsetneqq" ?⊋) ("\\surd" ?√) ("\\swarrow" ?↙) - ("\\tau" ?τ) ("\\therefore" ?∴) - ("\\theta" ?θ) ("\\thickapprox" ?≈) ("\\thicksim" ?∼) ("\\to" ?→) @@ -918,19 +672,18 @@ system, including many technical ones. Examples: ("\\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 @@ system, including many technical ones. Examples: ("\\wedge" ?∧) ("\\wp" ?℘) ("\\wr" ?≀) - ("\\xi" ?ξ) - ("\\zeta" ?ζ) ("\\Bbb{N}" ?ℕ) ; AMS commands for blackboard bold ("\\Bbb{P}" ?ℙ) ; Also sometimes \mathbb. @@ -954,8 +705,6 @@ system, including many technical ones. Examples: ;; 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 @@ system, including many technical ones. Examples: ;; ("\\Writinghand" ?✍) ;; ("\\Yinyang" ?☯) ;; ("\\Heart" ?♡) - ("\\registered" ?®) - ("\\currency" ?¤) ("\\dh" ?ð) ("\\DH" ?Ð) ("\\th" ?þ) ("\\TH" ?Þ) - ("\\micro" ?µ) ("\\lnot" ?¬) ("\\ordfeminine" ?ª) ("\\ordmasculine" ?º) @@ -995,7 +741,6 @@ system, including many technical ones. Examples: ;; by analogy with lq, rq: ("\\ldq" ?\“) ("\\rdq" ?\”) - ("\\minus" ?−) ("\\defs" ?≙) ; per fuzz/zed ;; ("\\sqrt[3]" ?∛) ("\\llbracket" ?\〚) ; stmaryrd -- 2.39.2