emacs/lisp/leim/quail/latin-ltx.el

833 lines
21 KiB
EmacsLisp
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;;; latin-ltx.el --- Quail package for TeX-style input -*- lexical-binding: t; -*-
;; Copyright (C) 2001-2024 Free Software Foundation, Inc.
;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
;; 2010, 2011
;; National Institute of Advanced Industrial Science and Technology (AIST)
;; Registration Number H14PRO021
;; Author: TAKAHASHI Naoto <ntakahas@m17n.org>
;; Dave Love <fx@gnu.org>
;; Keywords: multilingual, input method, i18n
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;;; Code:
(require 'quail)
(quail-define-package
"TeX" "UTF-8" "\\" t
"LaTeX-like input method for many characters.
These characters are from the charsets used by the `utf-8' coding
system, including many technical ones. Examples:
\\\\='a -> á \\\\=`{a} -> à
\\pi -> π \\int -> ∫ ^1 -> ¹"
'(("\t" . quail-completion))
t t nil nil nil nil nil nil nil t)
(eval-when-compile
(require 'cl-lib)
(defconst latin-ltx--mark-map
'(("DOT BELOW" . "d")
("DOT ABOVE" . ".")
("OGONEK" . "k")
("CEDILLA" . "c")
("CARON" . "v")
;; ("HOOK ABOVE" . ??)
("MACRON" . "=")
("BREVE" . "u")
("TILDE" . "~")
("GRAVE" . "`")
("CIRCUMFLEX" . "^")
("DIAERESIS" . "\"")
("DOUBLE ACUTE" . "H")
("ACUTE" . "'")))
(defconst latin-ltx--mark-re (regexp-opt (mapcar #'car latin-ltx--mark-map)))
(defun latin-ltx--ascii-p (char)
(and (characterp char) (< char 128)))
(defmacro latin-ltx--define-rules (&rest rules)
(load "uni-name" nil t)
(let ((newrules ()))
(dolist (rule rules)
(pcase rule
(`(,_ ,(pred characterp)) (push rule newrules)) ;; Normal quail rule.
(`(,seq ,re)
(let ((count 0)
(re (eval re t)))
(maphash
(lambda (name char)
(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)))))
(ucs-names))
;; (message "latin-ltx: %d mappings for %S" count re)
))))
(setq newrules (delete-dups newrules))
(let ((rules (copy-sequence newrules)))
(while rules
(let ((rule (pop rules)))
(when (assoc (car rule) rules)
(let ((conflicts (list (cadr rule)))
(tail rules)
c)
(while (setq c (assoc (car rule) tail))
(push (cadr c) conflicts)
(setq tail (cdr (memq c tail)))
(setq rules (delq c rules)))
(message "Conflict for %S: %S"
(car rule) (apply #'string conflicts)))))))
(let* ((inputs (delete-dups (mapcar #'car newrules)))
(conflicts (- (length newrules) (length inputs))))
(unless (zerop conflicts)
(message "latin-ltx: %d rules (+ %d conflicts)!"
(length inputs) conflicts)))
`(quail-define-rules ,@(nreverse newrules)))))
(latin-ltx--define-rules
("!`" )
("\\pounds" ) ;; ("{\\pounds}" ?£)
("\\S" ) ;; ("{\\S}" ?§)
("$^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" )
("$^1$" )
("$^o$" )
("?`" ?¿)
((lambda (name char)
(let* ((c (if (match-end 1)
(downcase (match-string 2 name))
(match-string 2 name)))
(mark1 (cdr (assoc (match-string 3 name) latin-ltx--mark-map)))
(mark2 (if (match-end 4)
(cdr (assoc (match-string 4 name) latin-ltx--mark-map))))
(marks (if mark2 (concat mark1 "\\" mark2) mark1)))
(cl-assert mark1)
(cons (format "\\%s{%s}" marks c)
;; Exclude "d" because we use "\\dh" for something else.
(unless (member (or mark2 mark1) '("d"));; "k"
(list (format "\\%s%s" marks c))))))
(concat "\\`LATIN \\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH \\("
latin-ltx--mark-re "\\)\\(?: AND \\("
latin-ltx--mark-re "\\)\\)?\\'"))
((lambda (name char)
(let* ((mark (cdr (assoc (match-string 1 name) latin-ltx--mark-map))))
(cl-assert mark)
(list (format "\\%s" mark))))
(concat "\\`COMBINING \\(" latin-ltx--mark-re "\\)\\(?: ACCENT\\)?\\'"))
((lambda (name char)
(unless (latin-ltx--ascii-p char)
(let* ((mark (cdr (assoc (match-string 1 name) latin-ltx--mark-map))))
(cl-assert mark)
(list (format "\\%s{}" mark)))))
(concat "\\`\\(?:SPACING \\)?\\(" latin-ltx--mark-re "\\)\\(?: ACCENT\\)?\\'"))
("\\AA" ) ;; ("{\\AA}" ?Å)
("\\AE" ) ;; ("{\\AE}" ?Æ)
("$\\times$" ?×) ("\\times" ?×)
("\\O" ) ;; ("{\\O}" ?Ø)
("\\ss" ) ;; ("{\\ss}" ?ß)
("\\aa" ) ;; ("{\\aa}" ?å)
("\\ae" ) ;; ("{\\ae}" ?æ)
("$\\div$" ) ("\\div" )
("\\o" ) ;; ("{\\o}" ?ø)
("\\~{\\i}" )
("\\={\\i}" )
("\\u{\\i}" )
("\\i" ?ı) ;; ("{\\i}" ?ı)
("\\^{\\j}" )
("\\L" ) ;; ("{\\L}" ?Ł)
("\\l" ) ;; ("{\\l}" ?ł)
("\\H" )
("\\H{}" )
("\\U{o}" ) ("\\Uo" ) ;; FIXME: Was it just a typo?
("\\OE" ) ;; ("{\\OE}" ?Œ)
("\\oe" ) ;; ("{\\oe}" ?œ)
("\\v{\\i}" )
("\\={\\AE}" ) ("\\=\\AE" )
("\\={\\ae}" ) ("\\=\\ae" )
("\\v{\\j}" )
("\\'{\\AE}" ) ("\\'\\AE" )
("\\'{\\ae}" ) ("\\'\\ae" )
("\\'{\\O}" ) ("\\'\\O" )
("\\'{\\o}" ?ǿ) ("\\'\\o" ?ǿ)
("\\," ?)
("\\/" ?)
("\\:" ?)
("\\;" ?)
((lambda (name char)
(let* ((base (concat (match-string 1 name) (match-string 3 name)))
(basechar (gethash base (ucs-names))))
(when (latin-ltx--ascii-p basechar)
(string (if (match-end 2) ?^ ?_) basechar))))
"\\(.*\\)SU\\(?:B\\|\\(PER\\)\\)SCRIPT \\(.*\\)")
((lambda (name _char)
(let* ((basename (match-string 2 name))
(name (if (match-end 1) (capitalize basename) (downcase basename))))
(concat "^" (if (> (length name) 1) "\\") name)))
"\\`MODIFIER LETTER \\(?:SMALL\\|CAPITA\\(L\\)\\) \\([[:ascii:]]+\\)\\'")
;; ((lambda (name char) (format "^%s" (downcase (match-string 1 name))))
;; "\\`MODIFIER LETTER SMALL \\(.\\)\\'")
;; ("^\\1" "\\`MODIFIER LETTER CAPITAL \\(.\\)\\'")
("^o_" )
("^{SM}" ?℠)
("^{TEL}" ?℡)
("^{TM}" ?™)
("\\b" )
("\\rq" ?)
;; FIXME: Provides some useful entries (yen, euro, copyright, registered,
;; currency, minus, micro), but also a lot of dubious ones.
((lambda (name char)
(unless (or (latin-ltx--ascii-p char)
;; We prefer COMBINING LONG SOLIDUS OVERLAY for \not.
(member name '("NOT SIGN")))
(concat "\\" (downcase (match-string 1 name)))))
"\\`\\([^- ]+\\) SIGN\\'")
((lambda (name char)
;; "GREEK SMALL LETTER PHI" (which is \phi) and "GREEK PHI SYMBOL"
;; (which is \varphi) are reversed in `ucs-names', so we define
;; them manually. Also ignore "GREEK SMALL LETTER EPSILON" and
;; add the correct value for \epsilon manually.
(unless (string-match-p "\\<GREEK SMALL LETTER \\(?:EPSILON\\|PHI\\)\\>"
name)
(concat "\\" (funcall (if (match-end 1) #' capitalize #'downcase)
(match-string 2 name)))))
"\\`GREEK \\(?:SMALL\\|CAPITA\\(L\\)\\) LETTER \\([^- ]+\\)\\'")
("\\epsilon" )
("\\phi" )
("\\Box" ?□)
("\\Bumpeq" ?≎)
("\\Cap" ?⋒)
("\\Cup" ?⋓)
("\\Diamond" ?◇)
("\\Downarrow" ?⇓)
("\\H{o}" )
("\\Im" ?)
("\\Join" ?⋈)
("\\Leftarrow" ?⇐)
("\\Leftrightarrow" ?⇔)
("\\Ll" ?⋘)
("\\Lleftarrow" ?⇚)
("\\Longleftarrow" ?⇐)
("\\Longleftrightarrow" ?⇔)
("\\Longrightarrow" ?⇒)
("\\Lsh" ?↰)
("\\Re" ?)
("\\Rightarrow" ?⇒)
("\\Rrightarrow" ?⇛)
("\\Rsh" ?↱)
("\\Subset" ?⋐)
("\\Supset" ?⋑)
("\\Uparrow" ?⇑)
("\\Updownarrow" ?⇕)
("\\Vdash" ?⊩)
("\\Vert" ?‖)
("\\Vvdash" ?⊪)
("\\above" ?┴)
("\\aleph" ?ℵ)
("\\amalg" ?∐)
("\\angle" ?∠)
("\\aoint" ?∳)
("\\approx" ?≈)
("\\approxeq" ?≊)
("\\asmash" ?⬆)
("\\ast" ?)
("\\asymp" ?≍)
("\\atop" )
("\\backcong" ?≌)
("\\backepsilon" ?∍)
("\\backprime" ?)
("\\backsim" ?∽)
("\\backsimeq" ?⋍)
("\\backslash" ?\\)
("\\barwedge" ?⊼)
("\\because" ?∵)
("\\begin" ?\〖)
("\\below" ?┬)
("\\beth" ?ℶ)
("\\between" ?≬)
("\\bigcap" ?⋂)
("\\bigcirc" ?◯)
("\\bigcup" ?)
("\\bigodot" ?⨀)
("\\bigoplus" ?⨁)
("\\bigotimes" ?⨂)
("\\bigsqcup" ?⨆)
("\\biguplus" ?⨄)
("\\bigstar" ?★)
("\\bigtriangledown" ?▽)
("\\bigtriangleup" ?△)
("\\bigvee" ?)
("\\bigwedge" ?⋀)
("\\blacklozenge" ?✦)
("\\blacksquare" ?▪)
("\\blacktriangle" ?▴)
("\\blacktriangledown" ?▾)
("\\blacktriangleleft" ?◂)
("\\blacktriangleright" ?▸)
("\\bot" ?⊥)
("\\bowtie" ?⋈)
("\\boxminus" ?⊟)
("\\boxplus" ?⊞)
("\\boxtimes" ?⊠)
("\\bra" ?\⟨)
("\\bullet" ?•)
("\\bumpeq" ?≏)
("\\cap" ?∩)
("\\cdots" ?⋯)
("\\centerdot" )
("\\checkmark" ?✓)
("\\chi" )
("\\circ" ?∘)
("\\circeq" ?≗)
("\\circlearrowleft" ?↺)
("\\circlearrowright" ?↻)
("\\circledR" )
("\\circledS" ?Ⓢ)
("\\circledast" ?⊛)
("\\circledcirc" ?⊚)
("\\circleddash" ?⊝)
("\\close" ?┤)
("\\clubsuit" ?♣)
("\\coint" ?∲)
("\\coloneq" ?≔)
("\\complement" ?∁)
("\\cong" ?≅)
("\\coprod" ?∐)
("\\cup" ?)
("\\curlyeqprec" ?⋞)
("\\curlyeqsucc" ?⋟)
("\\curlypreceq" ?≼)
("\\curlyvee" ?⋎)
("\\curlywedge" ?⋏)
("\\curvearrowleft" ?↶)
("\\curvearrowright" ?↷)
("\\dag" ?†)
("\\dagger" ?†)
("\\daleth" ?ℸ)
("\\dashv" ?⊣)
("\\Dd" ?)
("\\dd" ?)
("\\ddag" ?‡)
("\\ddagger" ?‡)
("\\ddddot" ?⃜)
("\\dddot" ?⃛)
("\\ddots" ?⋱)
("\\diamond" ?⋄)
("\\diamondsuit" ?♢)
("\\divideontimes" ?⋇)
("\\doteq" ?≐)
("\\doteqdot" ?≑)
("\\dotplus" ?∔)
("\\dotsquare" ?⊡)
("\\downarrow" ?↓)
("\\downdownarrows" ?⇊)
("\\downleftharpoon" ?⇃)
("\\downrightharpoon" ?⇂)
("\\dsmash" ?⬇)
("\\ee" ?)
("\\ell" ?)
("\\emptyset" ?∅)
("\\end" ?\〗)
("\\eqarray" ?█)
("\\eqcirc" ?≖)
("\\eqcolon" ?≕)
("\\eqslantgtr" ?⋝)
("\\eqslantless" ?⋜)
("\\equiv" ?≡)
("\\exists" ?∃)
("\\fallingdotseq" ?≒)
("\\flat" ?♭)
("\\forall" ?∀)
("\\frac1" ?⅟)
("\\frac12" )
("\\frac13" ?⅓)
("\\frac14" )
("\\frac15" ?⅕)
("\\frac16" ?⅙)
("\\frac18" ?⅛)
("\\frac23" ?⅔)
("\\frac25" ?⅖)
("\\frac34" )
("\\frac35" ?⅗)
("\\frac38" ?⅜)
("\\frac45" ?⅘)
("\\frac56" ?⅚)
("\\frac58" ?⅝)
("\\frac78" ?⅞)
("\\frown" ?⌢)
("\\ge" ?≥)
("\\geq" ?≥)
("\\geqq" ?≧)
("\\geqslant" ?≥)
("\\gets" ?←)
("\\gg" ?≫)
("\\ggg" ?⋙)
("\\gimel" ?ℷ)
("\\gnapprox" ?⋧)
("\\gneq" ?≩)
("\\gneqq" ?≩)
("\\gnsim" ?⋧)
("\\gtrapprox" ?≳)
("\\gtrdot" ?⋗)
("\\gtreqless" ?⋛)
("\\gtreqqless" ?⋛)
("\\gtrless" ?≷)
("\\gtrsim" ?≳)
("\\gvertneqq" ?≩)
("\\hbar" ?ℏ)
("\\heartsuit" ?♥)
("\\hookleftarrow" ?↩)
("\\hookrightarrow" ?↪)
("\\hphantom" ?⬄)
("\\hsmash" ?⬌)
("\\iff" ?⇔)
("\\ii" ?)
("\\iiiint" ?⨌)
("\\iiint" ?∭)
("\\iint" ?∬)
("\\imath" ?ı)
("\\in" ?∈)
("\\infty" ?∞)
("\\int" ?∫)
("\\intercal" ?⊺)
("\\jj" ?)
("\\jmath" )
("\\langle" ?⟨) ;; Was ?〈, see bug#12948.
("\\lbrace" ?{)
("\\lbrack" ?\[)
("\\lceil" ?⌈)
("\\ldiv" ?)
("\\ldots" ?…)
("\\le" ?≤)
("\\leadsto" ?↝)
("\\leftarrow" ?←)
("\\leftarrowtail" ?↢)
("\\leftharpoondown" ?↽)
("\\leftharpoonup" ?↼)
("\\leftleftarrows" ?⇇)
;; ("\\leftparengtr" ?〈), see bug#12948.
("\\leftrightarrow" ?↔)
("\\leftrightarrows" ?⇆)
("\\leftrightharpoons" ?⇋)
("\\leftrightsquigarrow" ?↭)
("\\leftthreetimes" ?⋋)
("\\leq" ?≤)
("\\leqq" ?≦)
("\\leqslant" ?≤)
("\\lessapprox" ?≲)
("\\lessdot" ?⋖)
("\\lesseqgtr" ?⋚)
("\\lesseqqgtr" ?⋚)
("\\lessgtr" ?≶)
("\\lesssim" ?≲)
("\\lfloor" ?⌊)
("\\lhd" ?◁)
("\\rhd" ?▷)
("\\ll" ?≪)
("\\llcorner" ?⌞)
("\\lll" ?⋘)
("\\lnapprox" ?⋦)
("\\lneq" ?≨)
("\\lneqq" ?≨)
("\\lnsim" ?⋦)
("\\longleftarrow" ?⟵)
("\\longleftrightarrow" ?⟷)
("\\longmapsto" ?⟼)
("\\longrightarrow" ?⟶)
("\\looparrowleft" ?↫)
("\\looparrowright" ?↬)
("\\lozenge" ?✧)
("\\lq" ?)
("\\lrcorner" ?⌟)
("\\ltimes" ?⋉)
("\\lvertneqq" ?≨)
("\\maltese" ?✠)
("\\mapsto" ?↦)
("\\measuredangle" ?∡)
("\\mho" ?℧)
("\\mid" ?)
("\\models" ?⊧)
("\\mp" ?∓)
("\\multimap" ?⊸)
("\\nLeftarrow" ?⇍)
("\\nLeftrightarrow" ?⇎)
("\\nRightarrow" ?⇏)
("\\nVDash" ?⊯)
("\\nVdash" ?⊮)
("\\nabla" ?∇)
("\\napprox" ?≉)
("\\natural" ?♮)
("\\ncong" ?≇)
("\\ne" ?≠)
("\\nearrow" ?↗)
("\\neg" )
("\\neq" ?≠)
("\\nequiv" ?≢)
("\\newline" ?)
("\\nexists" ?∄)
("\\ngeq" ?≱)
("\\ngeqq" ?≱)
("\\ngeqslant" ?≱)
("\\ngtr" ?≯)
("\\ni" ?∋)
("\\nleftarrow" ?↚)
("\\nleftrightarrow" ?↮)
("\\nleq" ?≰)
("\\nleqq" ?≰)
("\\nleqslant" ?≰)
("\\nless" ?≮)
("\\nmid" ?∤)
("\\not" ) ;FIXME: conflict with "NOT SIGN" ¬.
("\\notin" ?∉)
("\\nparallel" ?∦)
("\\nprec" ?⊀)
("\\npreceq" ?⋠)
("\\nrightarrow" ?↛)
("\\nshortmid" ?∤)
("\\nshortparallel" ?∦)
("\\nsim" ?≁)
("\\nsimeq" ?≄)
("\\nsubset" ?⊄)
("\\nsubseteq" ?⊈)
("\\nsubseteqq" ?⊈)
("\\nsucc" ?⊁)
("\\nsucceq" ?⋡)
("\\nsupset" ?⊅)
("\\nsupseteq" ?⊉)
("\\nsupseteqq" ?⊉)
("\\ntriangleleft" ?⋪)
("\\ntrianglelefteq" ?⋬)
("\\ntriangleright" ?⋫)
("\\ntrianglerighteq" ?⋭)
("\\nvDash" ?⊭)
("\\nvdash" ?⊬)
("\\nwarrow" ?↖)
("\\odot" ?⊙)
("\\oiiint" ?∰)
("\\oiint" ?∯)
("\\oint" ?∮)
("\\ominus" ?⊖)
("\\oplus" ?⊕)
("\\oslash" ?⊘)
("\\otimes" ?⊗)
("\\overbrace" ?⏞)
("\\overparen" ?⏜)
("\\par" ?)
("\\parallel" ?∥)
("\\partial" ?∂)
("\\perp" ?⊥)
("\\phantom" ?⟡)
("\\pitchfork" ?⋔)
("\\pppprime" ?⁗)
("\\ppprime" ?‴)
("\\pprime" ?″)
("\\prcue" ?≼)
("\\prec" ?≺)
("\\precapprox" ?≾)
("\\preceq" ?≼)
("\\precnapprox" ?⋨)
("\\precnsim" ?⋨)
("\\precsim" ?≾)
("\\prime" ?)
("\\prod" ?∏)
("\\propto" ?∝)
("\\qdrt" ?∜)
("\\qed" ?∎)
("\\quad" ?)
("\\rangle" ?\⟩) ;; Was ?〉, see bug#12948.
("\\ratio" ?)
("\\rbrace" ?})
("\\rbrack" ?\])
("\\rceil" ?⌉)
("\\rddots" ?⋰)
("\\rect" ?▭)
("\\rfloor" ?⌋)
("\\rightarrow" ?→)
("\\rightarrowtail" ?↣)
("\\rightharpoondown" ?⇁)
("\\rightharpoonup" ?⇀)
("\\rightleftarrows" ?⇄)
("\\rightleftharpoons" ?⇌)
;; ("\\rightparengtr" ?⦔) ;; Was ?〉, see bug#12948.
("\\rightrightarrows" ?⇉)
("\\rightthreetimes" ?⋌)
("\\risingdotseq" ?≓)
("\\rrect" ?▢)
("\\sdiv" ?)
("\\rtimes" ?⋊)
("\\sbs" ?)
("\\searrow" ?↘)
("\\setminus" ?)
("\\sharp" ?♯)
("\\shortmid" ?)
("\\shortparallel" ?∥)
("\\sim" ?)
("\\simeq" ?≃)
("\\smallamalg" ?∐)
("\\smallsetminus" ?)
("\\smallsmile" ?⌣)
("\\smash" ?⬍)
("\\smile" ?⌣)
("\\spadesuit" ?♠)
("\\sphericalangle" ?∢)
("\\sqcap" ?⊓)
("\\sqcup" ?⊔)
("\\sqsubset" ?⊏)
("\\sqsubseteq" ?⊑)
("\\sqsupset" ?⊐)
("\\sqsupseteq" ?⊒)
("\\square" ?□)
("\\squigarrowright" ?⇝)
("\\star" ?⋆)
("\\straightphi" )
("\\subset" ?⊂)
("\\subseteq" ?⊆)
("\\subseteqq" ?⊆)
("\\subsetneq" ?⊊)
("\\subsetneqq" ?⊊)
("\\succ" ?≻)
("\\succapprox" ?≿)
("\\succcurlyeq" ?≽)
("\\succeq" ?≽)
("\\succnapprox" ?⋩)
("\\succnsim" ?⋩)
("\\succsim" ?≿)
("\\sum" ?∑)
("\\supset" ?⊃)
("\\supseteq" ?⊇)
("\\supseteqq" ?⊇)
("\\supsetneq" ?⊋)
("\\supsetneqq" ?⊋)
("\\surd" ?√)
("\\swarrow" ?↙)
("\\therefore" ?∴)
("\\thickapprox" ?≈)
("\\thicksim" ?)
("\\to" ?→)
("\\top" ?)
("\\triangle" ?▵)
("\\triangledown" ?▿)
("\\triangleleft" ?◃)
("\\trianglelefteq" ?⊴)
("\\triangleq" ?≜)
("\\triangleright" ?▹)
("\\trianglerighteq" ?⊵)
("\\twoheadleftarrow" ?↞)
("\\twoheadrightarrow" ?↠)
("\\ulcorner" ?⌜)
("\\uparrow" ?↑)
("\\updownarrow" ?↕)
("\\underbar" ?▁)
("\\underbrace" ?⏟)
("\\underparen" ?⏝)
("\\upleftharpoon" ?↿)
("\\uplus" ?⊎)
("\\uprightharpoon" ?↾)
("\\upuparrows" ?⇈)
("\\urcorner" ?⌝)
("\\u{i}" )
("\\vbar" ?│)
("\\vDash" ?⊨)
((lambda (name char)
;; "GREEK SMALL LETTER PHI" (which is \phi) and "GREEK PHI SYMBOL"
;; (which is \varphi) are reversed in `ucs-names', so we define
;; them manually.
(unless (string-match-p "\\<PHI\\>" name)
(concat "\\var" (downcase (match-string 1 name)))))
"\\`GREEK \\([^- ]+\\) SYMBOL\\'")
("\\varepsilon" )
("\\varphi" )
("\\varprime" ?)
("\\varpropto" ?∝)
("\\varsigma" )
("\\vartriangleleft" ?⊲)
("\\vartriangleright" ?⊳)
("\\vdash" ?⊢)
("\\vdots" ?⋮)
("\\vee" ?)
("\\veebar" ?⊻)
("\\vert" ?|)
("\\vphantom" ?⇳)
("\\wedge" ?∧)
("\\wp" ?℘)
("\\wr" ?≀)
("\\Bbb{A}" ?𝔸) ; AMS commands for blackboard bold
("\\Bbb{B}" ?𝔹) ; Also sometimes \mathbb.
("\\Bbb{C}" ?)
("\\Bbb{D}" ?𝔻)
("\\Bbb{E}" ?𝔼)
("\\Bbb{F}" ?𝔽)
("\\Bbb{G}" ?𝔾)
("\\Bbb{H}" ?)
("\\Bbb{I}" ?𝕀)
("\\Bbb{J}" ?𝕁)
("\\Bbb{K}" ?𝕂)
("\\Bbb{L}" ?𝕃)
("\\Bbb{M}" ?𝕄)
("\\Bbb{N}" ?)
("\\Bbb{O}" ?𝕆)
("\\Bbb{P}" ?)
("\\Bbb{Q}" ?)
("\\Bbb{R}" ?)
("\\Bbb{S}" ?𝕊)
("\\Bbb{T}" ?𝕋)
("\\Bbb{U}" ?𝕌)
("\\Bbb{V}" ?𝕍)
("\\Bbb{W}" ?𝕎)
("\\Bbb{X}" ?𝕏)
("\\Bbb{Y}" ?𝕐)
("\\Bbb{Z}" ?)
("\\Bbb{1}" ?𝟙)
("\\Bbb{2}" ?𝟚)
("--" ?)
("---" ?—)
;; We used to use ~ for NBSP but that's inconvenient and may even look like
;; a bug where the user finds his ~ key doesn't insert a ~ any more.
("\\ " ? )
("\\\\" ?\\)
("\\mathscr{I}" ?) ; moment of inertia
("\\Smiley" ?☺)
("\\blacksmiley" ?☻)
("\\Frowny" ?☹)
("\\Letter" ?✉)
("\\permil" ?‰)
;; Probably not useful enough:
;; ("\\Telefon" ?☎) ; there are other possibilities
;; ("\\Radioactivity" ?☢)
;; ("\\Biohazard" ?☣)
;; ("\\Male" ?♂)
;; ("\\Female" ?♀)
;; ("\\Lightning" ?☇)
;; ("\\Mercury" ?☿)
;; ("\\Earth" ?♁)
;; ("\\Jupiter" ?♃)
;; ("\\Saturn" ?♄)
;; ("\\Uranus" ?♅)
;; ("\\Neptune" ?♆)
;; ("\\Pluto" ?♇)
;; ("\\Sun" ?☉)
;; ("\\Writinghand" ?✍)
;; ("\\Yinyang" ?☯)
;; ("\\Heart" ?♡)
("\\dh" )
("\\DH" )
("\\th" )
("\\TH" )
("\\lnot" )
("\\ordfeminine" )
("\\ordmasculine" )
("\\lambdabar" )
("\\celsius" ?℃)
;; by analogy with lq, rq:
("\\ldq" ?\“)
("\\rdq" ?\”)
("\\defs" ?≙) ; per fuzz/zed
("\\sqrt" ?√)
("\\sqrt[3]" ?∛)
("\\sqrt[4]" ?∜)
("\\llbracket" ?\〚) ; stmaryrd
("\\rrbracket" ?\〛)
;; ("\\lbag" ?\〚) ; fuzz
;; ("\\rbag" ?\〛)
("\\ldata" ?\《) ; fuzz/zed
("\\rdata" ?\》)
;; From Karl Eichwalder.
("\\glq" ?)
("\\grq" ?)
("\\glqq" ?„) ("\\\"`" ?„)
("\\grqq" ?“) ("\\\"'" ?“)
("\\flq" ?)
("\\frq" ?)
("\\flqq" ?\«) ("\\\"<" ?\«)
("\\frqq" ?\») ("\\\">" ?\»)
("\\-" ?­) ;; soft hyphen
("\\textmu" )
("\\textfractionsolidus" ?)
("\\textbigcircle" ?⃝)
("\\textmusicalnote" ?♪)
("\\textdied" ?✝)
("\\textcolonmonetary" ?₡)
("\\textwon" ?₩)
("\\textnaira" ?₦)
("\\textpeso" ?₱)
("\\textlira" ?₤)
("\\textrecipe" ?℞)
("\\textinterrobang" ?‽)
("\\textpertenthousand" ?‱)
("\\textbaht" ?฿)
("\\textnumero" ?№)
("\\textdiscount" ?⁒)
("\\textestimated" ?)
("\\textopenbullet" ?◦)
("\\textlquill" ?\⁅)
("\\textrquill" ?\⁆)
("\\textcircledP" ?℗)
("\\textreferencemark" ?※)
)
;;; latin-ltx.el ends here