Update copyright year to 2014 by running admin/update-copyright.
[emacs.git] / lisp / leim / quail / latin-ltx.el
blobe4222d05b89191c5985762fb5820226f09c27a1e
1 ;;; latin-ltx.el --- Quail package for TeX-style input -*-coding: utf-8;-*-
3 ;; Copyright (C) 2001-2014 Free Software Foundation, Inc.
4 ;; Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
5 ;; 2010, 2011
6 ;; National Institute of Advanced Industrial Science and Technology (AIST)
7 ;; Registration Number H14PRO021
9 ;; Author: TAKAHASHI Naoto <ntakahas@m17n.org>
10 ;; Dave Love <fx@gnu.org>
11 ;; Keywords: multilingual, input, Greek, i18n
13 ;; This file is part of GNU Emacs.
15 ;; GNU Emacs is free software: you can redistribute it and/or modify
16 ;; it under the terms of the GNU General Public License as published by
17 ;; the Free Software Foundation, either version 3 of the License, or
18 ;; (at your option) any later version.
20 ;; GNU Emacs is distributed in the hope that it will be useful,
21 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
22 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 ;; GNU General Public License for more details.
25 ;; You should have received a copy of the GNU General Public License
26 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
28 ;;; Commentary:
30 ;;; Code:
32 (require 'quail)
34 (quail-define-package
35 "TeX" "UTF-8" "\\" t
36 "LaTeX-like input method for many characters.
37 These characters are from the charsets used by the `utf-8' coding
38 system, including many technical ones. Examples:
39 \\'a -> á \\`{a} -> à
40 \\pi -> π \\int -> ∫ ^1 -> ¹"
42 '(("\t" . quail-completion))
43 t t nil nil nil nil nil nil nil t)
45 (eval-when-compile
46 (require 'cl-lib)
48 (defconst latin-ltx--mark-map
49 '(("DOT BELOW" . "d")
50 ("DOT ABOVE" . ".")
51 ("OGONEK" . "k")
52 ("CEDILLA" . "c")
53 ("CARON" . "v")
54 ;; ("HOOK ABOVE" . ??)
55 ("MACRON" . "=")
56 ("BREVE" . "u")
57 ("TILDE" . "~")
58 ("GRAVE" . "`")
59 ("CIRCUMFLEX" . "^")
60 ("DIAERESIS" . "\"")
61 ("DOUBLE ACUTE" . "H")
62 ("ACUTE" . "'")))
64 (defconst latin-ltx--mark-re (regexp-opt (mapcar #'car latin-ltx--mark-map)))
66 (defun latin-ltx--ascii-p (char)
67 (and (characterp char) (< char 128)))
69 (defmacro latin-ltx--define-rules (&rest rules)
70 (load "uni-name")
71 (let ((newrules ()))
72 (dolist (rule rules)
73 (pcase rule
74 (`(,_ ,(pred characterp)) (push rule newrules)) ;; Normal quail rule.
75 (`(,seq ,re)
76 (let ((count 0)
77 (re (eval re t)))
78 (dolist (pair (ucs-names))
79 (let ((name (car pair))
80 (char (cdr pair)))
81 (when (and (characterp char) ;; Ignore char-ranges.
82 (string-match re name))
83 (let ((keys (if (stringp seq)
84 (replace-match seq nil nil name)
85 (funcall seq name char))))
86 (if (listp keys)
87 (dolist (x keys)
88 (setq count (1+ count))
89 (push (list x char) newrules))
90 (setq count (1+ count))
91 (push (list keys char) newrules))))))
92 ;; (message "latin-ltx: %d mappings for %S" count re)
93 ))))
94 (setq newrules (delete-dups newrules))
95 (let ((rules (copy-sequence newrules)))
96 (while rules
97 (let ((rule (pop rules)))
98 (when (assoc (car rule) rules)
99 (let ((conflicts (list (cadr rule)))
100 (tail rules)
102 (while (setq c (assoc (car rule) tail))
103 (push (cadr c) conflicts)
104 (setq tail (cdr (memq c tail)))
105 (setq rules (delq c rules)))
106 (message "Conflict for %S: %S"
107 (car rule) (apply #'string conflicts)))))))
108 (let ((inputs (mapcar #'car newrules)))
109 (setq inputs (delete-dups inputs))
110 (message "latin-ltx: %d rules (+ %d conflicts)!"
111 (length inputs) (- (length newrules) (length inputs))))
112 `(quail-define-rules ,@(nreverse newrules)))))
114 (latin-ltx--define-rules
115 ("!`")
116 ("\\pounds") ;; ("{\\pounds}" ?£)
117 ("\\S") ;; ("{\\S}" ?§)
118 ("$^a$")
119 ("$\\pm$") ("\\pm")
120 ("$^2$")
121 ("$^3$")
122 ("\\P") ;; ("{\\P}" ?¶)
123 ;; Fixme: Yudit has the equivalent of ("\\cdot" ?⋅), for U+22C5, DOT
124 ;; OPERATOR, whereas · is MIDDLE DOT. JadeTeX translates both to
125 ;; \cdot.
126 ("$\\cdot$") ("\\cdot")
127 ("$^1$")
128 ("$^o$")
129 ("?`" ?¿)
131 ((lambda (name char)
132 (let* ((c (if (match-end 1)
133 (downcase (match-string 2 name))
134 (match-string 2 name)))
135 (mark1 (cdr (assoc (match-string 3 name) latin-ltx--mark-map)))
136 (mark2 (if (match-end 4)
137 (cdr (assoc (match-string 4 name) latin-ltx--mark-map))))
138 (marks (if mark2 (concat mark1 "\\" mark2) mark1)))
139 (cl-assert mark1)
140 (cons (format "\\%s{%s}" marks c)
141 ;; Exclude "d" because we use "\\dh" for something else.
142 (unless (member (or mark2 mark1) '("d"));; "k"
143 (list (format "\\%s%s" marks c))))))
144 (concat "\\`LATIN \\(?:CAPITAL\\|SMAL\\(L\\)\\) LETTER \\(.\\) WITH \\("
145 latin-ltx--mark-re "\\)\\(?: AND \\("
146 latin-ltx--mark-re "\\)\\)?\\'"))
148 ((lambda (name char)
149 (let* ((mark (cdr (assoc (match-string 1 name) latin-ltx--mark-map))))
150 (cl-assert mark)
151 (list (format "\\%s" mark))))
152 (concat "\\`COMBINING \\(" latin-ltx--mark-re "\\)\\(?: ACCENT\\)?\\'"))
154 ((lambda (name char)
155 (unless (latin-ltx--ascii-p char)
156 (let* ((mark (cdr (assoc (match-string 1 name) latin-ltx--mark-map))))
157 (cl-assert mark)
158 (list (format "\\%s{}" mark)))))
159 (concat "\\`\\(?:SPACING \\)?\\(" latin-ltx--mark-re "\\)\\(?: ACCENT\\)?\\'"))
161 ("\\AA") ;; ("{\\AA}" ?Å)
162 ("\\AE") ;; ("{\\AE}" ?Æ)
164 ("$\\times$") ("\\times")
165 ("\\O") ;; ("{\\O}" ?Ø)
166 ("\\ss") ;; ("{\\ss}" ?ß)
168 ("\\aa") ;; ("{\\aa}" ?å)
169 ("\\ae") ;; ("{\\ae}" ?æ)
171 ("$\\div$") ("\\div")
172 ("\\o") ;; ("{\\o}" ?ø)
174 ("\\~{\\i}")
175 ("\\={\\i}")
176 ("\\u{\\i}")
178 ("\\i") ;; ("{\\i}" ?ı)
179 ("\\^{\\j}")
181 ("\\L") ;; ("{\\L}" ?Ł)
182 ("\\l") ;; ("{\\l}" ?ł)
184 ("\\H")
185 ("\\H{}")
186 ("\\U{o}") ("\\Uo") ;; FIXME: Was it just a typo?
188 ("\\OE") ;; ("{\\OE}" ?Œ)
189 ("\\oe") ;; ("{\\oe}" ?œ)
191 ("\\v{\\i}")
193 ("\\={\\AE}") ("\\=\\AE")
194 ("\\={\\ae}") ("\\=\\ae")
196 ("\\v{\\j}")
197 ("\\'{\\AE}") ("\\'\\AE")
198 ("\\'{\\ae}") ("\\'\\ae")
199 ("\\'{\\O}") ("\\'\\O")
200 ("\\'{\\o}" ?ǿ) ("\\'\\o" ?ǿ)
202 ("\\," ? )
203 ("\\/" ?‌)
204 ("\\:" ? )
205 ("\\;" ? )
207 ((lambda (name char)
208 (let* ((base (concat (match-string 1 name) (match-string 3 name)))
209 (basechar (cdr (assoc base (ucs-names)))))
210 (when (latin-ltx--ascii-p basechar)
211 (string (if (match-end 2) ?^ ?_) basechar))))
212 "\\(.*\\)SU\\(?:B\\|\\(PER\\)\\)SCRIPT \\(.*\\)")
214 ((lambda (name _char)
215 (let* ((basename (match-string 2 name))
216 (name (if (match-end 1) (capitalize basename) (downcase basename))))
217 (concat "^" (if (> (length name) 1) "\\") name)))
218 "\\`MODIFIER LETTER \\(?:SMALL\\|CAPITA\\(L\\)\\) \\([[:ascii:]]+\\)\\'")
220 ;; ((lambda (name char) (format "^%s" (downcase (match-string 1 name))))
221 ;; "\\`MODIFIER LETTER SMALL \\(.\\)\\'")
222 ;; ("^\\1" "\\`MODIFIER LETTER CAPITAL \\(.\\)\\'")
223 ("^o_")
224 ("^{SM}" ?℠)
225 ("^{TEL}" ?℡)
226 ("^{TM}" ?™)
228 ("\\b")
230 ("\\rq" ?’)
232 ;; FIXME: Provides some useful entries (yen, euro, copyright, registered,
233 ;; currency, minus, micro), but also a lot of dubious ones.
234 ((lambda (name char)
235 (unless (or (latin-ltx--ascii-p char)
236 ;; We prefer COMBINING LONG SOLIDUS OVERLAY for \not.
237 (member name '("NOT SIGN")))
238 (concat "\\" (downcase (match-string 1 name)))))
239 "\\`\\([^- ]+\\) SIGN\\'")
241 ((lambda (name char)
242 (concat "\\" (funcall (if (match-end 1) #' capitalize #'downcase)
243 (match-string 2 name))))
244 "\\`GREEK \\(?:SMALL\\|CAPITA\\(L\\)\\) LETTER \\([^- ]+\\)\\'")
246 ("\\Box" ?□)
247 ("\\Bumpeq" ?≎)
248 ("\\Cap" ?⋒)
249 ("\\Cup" ?⋓)
250 ("\\Diamond" ?◇)
251 ("\\Downarrow" ?⇓)
252 ("\\H{o}")
253 ("\\Im" ?ℑ)
254 ("\\Join" ?⋈)
255 ("\\Leftarrow" ?⇐)
256 ("\\Leftrightarrow" ?⇔)
257 ("\\Ll" ?⋘)
258 ("\\Lleftarrow" ?⇚)
259 ("\\Longleftarrow" ?⇐)
260 ("\\Longleftrightarrow" ?⇔)
261 ("\\Longrightarrow" ?⇒)
262 ("\\Lsh" ?↰)
263 ("\\Re" ?ℜ)
264 ("\\Rightarrow" ?⇒)
265 ("\\Rrightarrow" ?⇛)
266 ("\\Rsh" ?↱)
267 ("\\Subset" ?⋐)
268 ("\\Supset" ?⋑)
269 ("\\Uparrow" ?⇑)
270 ("\\Updownarrow" ?⇕)
271 ("\\Vdash" ?⊩)
272 ("\\Vert" ?‖)
273 ("\\Vvdash" ?⊪)
274 ("\\aleph" ?ℵ)
275 ("\\amalg" ?∐)
276 ("\\angle" ?∠)
277 ("\\approx" ?≈)
278 ("\\approxeq" ?≊)
279 ("\\ast" ?∗)
280 ("\\asymp" ?≍)
281 ("\\backcong" ?≌)
282 ("\\backepsilon" ?∍)
283 ("\\backprime" ?‵)
284 ("\\backsim" ?∽)
285 ("\\backsimeq" ?⋍)
286 ("\\backslash" ?\\)
287 ("\\barwedge" ?⊼)
288 ("\\because" ?∵)
289 ("\\beth" ?ℶ)
290 ("\\between" ?≬)
291 ("\\bigcap" ?⋂)
292 ("\\bigcirc" ?◯)
293 ("\\bigcup" ?⋃)
294 ("\\bigstar" ?★)
295 ("\\bigtriangledown" ?▽)
296 ("\\bigtriangleup" ?△)
297 ("\\bigvee" ?⋁)
298 ("\\bigwedge" ?⋀)
299 ("\\blacklozenge" ?✦)
300 ("\\blacksquare" ?▪)
301 ("\\blacktriangle" ?▴)
302 ("\\blacktriangledown" ?▾)
303 ("\\blacktriangleleft" ?◂)
304 ("\\blacktriangleright" ?▸)
305 ("\\bot" ?⊥)
306 ("\\bowtie" ?⋈)
307 ("\\boxminus" ?⊟)
308 ("\\boxplus" ?⊞)
309 ("\\boxtimes" ?⊠)
310 ("\\bullet" ?•)
311 ("\\bumpeq" ?≏)
312 ("\\cap" ?∩)
313 ("\\cdots" ?⋯)
314 ("\\centerdot")
315 ("\\checkmark" ?✓)
316 ("\\chi")
317 ("\\circ" ?∘)
318 ("\\circeq" ?≗)
319 ("\\circlearrowleft" ?↺)
320 ("\\circlearrowright" ?↻)
321 ("\\circledR")
322 ("\\circledS" ?Ⓢ)
323 ("\\circledast" ?⊛)
324 ("\\circledcirc" ?⊚)
325 ("\\circleddash" ?⊝)
326 ("\\clubsuit" ?♣)
327 ("\\coloneq" ?≔)
328 ("\\complement" ?∁)
329 ("\\cong" ?≅)
330 ("\\coprod" ?∐)
331 ("\\cup" ?∪)
332 ("\\curlyeqprec" ?⋞)
333 ("\\curlyeqsucc" ?⋟)
334 ("\\curlypreceq" ?≼)
335 ("\\curlyvee" ?⋎)
336 ("\\curlywedge" ?⋏)
337 ("\\curvearrowleft" ?↶)
338 ("\\curvearrowright" ?↷)
340 ("\\dag" ?†)
341 ("\\dagger" ?†)
342 ("\\daleth" ?ℸ)
343 ("\\dashv" ?⊣)
344 ("\\ddag" ?‡)
345 ("\\ddagger" ?‡)
346 ("\\ddots" ?⋱)
347 ("\\diamond" ?⋄)
348 ("\\diamondsuit" ?♢)
349 ("\\divideontimes" ?⋇)
350 ("\\doteq" ?≐)
351 ("\\doteqdot" ?≑)
352 ("\\dotplus" ?∔)
353 ("\\dotsquare" ?⊡)
354 ("\\downarrow" ?↓)
355 ("\\downdownarrows" ?⇊)
356 ("\\downleftharpoon" ?⇃)
357 ("\\downrightharpoon" ?⇂)
358 ("\\ell" ?ℓ)
359 ("\\emptyset" ?∅)
360 ("\\eqcirc" ?≖)
361 ("\\eqcolon" ?≕)
362 ("\\eqslantgtr" ?⋝)
363 ("\\eqslantless" ?⋜)
364 ("\\equiv" ?≡)
365 ("\\exists" ?∃)
366 ("\\fallingdotseq" ?≒)
367 ("\\flat" ?♭)
368 ("\\forall" ?∀)
369 ("\\frac1" ?⅟)
370 ("\\frac12")
371 ("\\frac13" ?⅓)
372 ("\\frac14")
373 ("\\frac15" ?⅕)
374 ("\\frac16" ?⅙)
375 ("\\frac18" ?⅛)
376 ("\\frac23" ?⅔)
377 ("\\frac25" ?⅖)
378 ("\\frac34")
379 ("\\frac35" ?⅗)
380 ("\\frac38" ?⅜)
381 ("\\frac45" ?⅘)
382 ("\\frac56" ?⅚)
383 ("\\frac58" ?⅝)
384 ("\\frac78" ?⅞)
385 ("\\frown" ?⌢)
386 ("\\ge" ?≥)
387 ("\\geq" ?≥)
388 ("\\geqq" ?≧)
389 ("\\geqslant" ?≥)
390 ("\\gets" ?←)
391 ("\\gg" ?≫)
392 ("\\ggg" ?⋙)
393 ("\\gimel" ?ℷ)
394 ("\\gnapprox" ?⋧)
395 ("\\gneq" ?≩)
396 ("\\gneqq" ?≩)
397 ("\\gnsim" ?⋧)
398 ("\\gtrapprox" ?≳)
399 ("\\gtrdot" ?⋗)
400 ("\\gtreqless" ?⋛)
401 ("\\gtreqqless" ?⋛)
402 ("\\gtrless" ?≷)
403 ("\\gtrsim" ?≳)
404 ("\\gvertneqq" ?≩)
405 ("\\hbar" ?ℏ)
406 ("\\heartsuit" ?♥)
407 ("\\hookleftarrow" ?↩)
408 ("\\hookrightarrow" ?↪)
409 ("\\iff" ?⇔)
410 ("\\imath")
411 ("\\in" ?∈)
412 ("\\infty" ?∞)
413 ("\\int" ?∫)
414 ("\\intercal" ?⊺)
415 ("\\langle" ?⟨) ;; Was ?〈, see bug#12948.
416 ("\\lbrace" ?{)
417 ("\\lbrack" ?\[)
418 ("\\lceil" ?⌈)
419 ("\\ldots" ?…)
420 ("\\le" ?≤)
421 ("\\leadsto" ?↝)
422 ("\\leftarrow" ?←)
423 ("\\leftarrowtail" ?↢)
424 ("\\leftharpoondown" ?↽)
425 ("\\leftharpoonup" ?↼)
426 ("\\leftleftarrows" ?⇇)
427 ;; ("\\leftparengtr" ?〈), see bug#12948.
428 ("\\leftrightarrow" ?↔)
429 ("\\leftrightarrows" ?⇆)
430 ("\\leftrightharpoons" ?⇋)
431 ("\\leftrightsquigarrow" ?↭)
432 ("\\leftthreetimes" ?⋋)
433 ("\\leq" ?≤)
434 ("\\leqq" ?≦)
435 ("\\leqslant" ?≤)
436 ("\\lessapprox" ?≲)
437 ("\\lessdot" ?⋖)
438 ("\\lesseqgtr" ?⋚)
439 ("\\lesseqqgtr" ?⋚)
440 ("\\lessgtr" ?≶)
441 ("\\lesssim" ?≲)
442 ("\\lfloor" ?⌊)
443 ("\\lhd" ?◁)
444 ("\\rhd" ?▷)
445 ("\\ll" ?≪)
446 ("\\llcorner" ?⌞)
447 ("\\lnapprox" ?⋦)
448 ("\\lneq" ?≨)
449 ("\\lneqq" ?≨)
450 ("\\lnsim" ?⋦)
451 ("\\longleftarrow" ?←)
452 ("\\longleftrightarrow" ?↔)
453 ("\\longmapsto" ?↦)
454 ("\\longrightarrow" ?→)
455 ("\\looparrowleft" ?↫)
456 ("\\looparrowright" ?↬)
457 ("\\lozenge" ?✧)
458 ("\\lq" ?‘)
459 ("\\lrcorner" ?⌟)
460 ("\\ltimes" ?⋉)
461 ("\\lvertneqq" ?≨)
462 ("\\maltese" ?✠)
463 ("\\mapsto" ?↦)
464 ("\\measuredangle" ?∡)
465 ("\\mho" ?℧)
466 ("\\mid" ?∣)
467 ("\\models" ?⊧)
468 ("\\mp" ?∓)
469 ("\\multimap" ?⊸)
470 ("\\nLeftarrow" ?⇍)
471 ("\\nLeftrightarrow" ?⇎)
472 ("\\nRightarrow" ?⇏)
473 ("\\nVDash" ?⊯)
474 ("\\nVdash" ?⊮)
475 ("\\nabla" ?∇)
476 ("\\napprox" ?≉)
477 ("\\natural" ?♮)
478 ("\\ncong" ?≇)
479 ("\\ne" ?≠)
480 ("\\nearrow" ?↗)
481 ("\\neg")
482 ("\\neq" ?≠)
483 ("\\nequiv" ?≢)
484 ("\\newline" ?
)
485 ("\\nexists" ?∄)
486 ("\\ngeq" ?≱)
487 ("\\ngeqq" ?≱)
488 ("\\ngeqslant" ?≱)
489 ("\\ngtr" ?≯)
490 ("\\ni" ?∋)
491 ("\\nleftarrow" ?↚)
492 ("\\nleftrightarrow" ?↮)
493 ("\\nleq" ?≰)
494 ("\\nleqq" ?≰)
495 ("\\nleqslant" ?≰)
496 ("\\nless" ?≮)
497 ("\\nmid" ?∤)
498 ("\\not") ;FIXME: conflict with "NOT SIGN" ¬.
499 ("\\notin" ?∉)
500 ("\\nparallel" ?∦)
501 ("\\nprec" ?⊀)
502 ("\\npreceq" ?⋠)
503 ("\\nrightarrow" ?↛)
504 ("\\nshortmid" ?∤)
505 ("\\nshortparallel" ?∦)
506 ("\\nsim" ?≁)
507 ("\\nsimeq" ?≄)
508 ("\\nsubset" ?⊄)
509 ("\\nsubseteq" ?⊈)
510 ("\\nsubseteqq" ?⊈)
511 ("\\nsucc" ?⊁)
512 ("\\nsucceq" ?⋡)
513 ("\\nsupset" ?⊅)
514 ("\\nsupseteq" ?⊉)
515 ("\\nsupseteqq" ?⊉)
516 ("\\ntriangleleft" ?⋪)
517 ("\\ntrianglelefteq" ?⋬)
518 ("\\ntriangleright" ?⋫)
519 ("\\ntrianglerighteq" ?⋭)
520 ("\\nvDash" ?⊭)
521 ("\\nvdash" ?⊬)
522 ("\\nwarrow" ?↖)
523 ("\\odot" ?⊙)
524 ("\\oint" ?∮)
525 ("\\ominus" ?⊖)
526 ("\\oplus" ?⊕)
527 ("\\oslash" ?⊘)
528 ("\\otimes" ?⊗)
529 ("\\par" ?
)
530 ("\\parallel" ?∥)
531 ("\\partial" ?∂)
532 ("\\perp" ?⊥)
533 ("\\pitchfork" ?⋔)
534 ("\\prec" ?≺)
535 ("\\precapprox" ?≾)
536 ("\\preceq" ?≼)
537 ("\\precnapprox" ?⋨)
538 ("\\precnsim" ?⋨)
539 ("\\precsim" ?≾)
540 ("\\prime" ?′)
541 ("\\prod" ?∏)
542 ("\\propto" ?∝)
543 ("\\qed" ?∎)
544 ("\\quad" ? )
545 ("\\rangle" ?⟩) ;; Was ?〉, see bug#12948.
546 ("\\rbrace" ?})
547 ("\\rbrack" ?\])
548 ("\\rceil" ?⌉)
549 ("\\rfloor" ?⌋)
550 ("\\rightarrow" ?→)
551 ("\\rightarrowtail" ?↣)
552 ("\\rightharpoondown" ?⇁)
553 ("\\rightharpoonup" ?⇀)
554 ("\\rightleftarrows" ?⇄)
555 ("\\rightleftharpoons" ?⇌)
556 ;; ("\\rightparengtr" ?⦔) ;; Was ?〉, see bug#12948.
557 ("\\rightrightarrows" ?⇉)
558 ("\\rightthreetimes" ?⋌)
559 ("\\risingdotseq" ?≓)
560 ("\\rtimes" ?⋊)
561 ("\\sbs" ?﹨)
562 ("\\searrow" ?↘)
563 ("\\setminus" ?∖)
564 ("\\sharp" ?♯)
565 ("\\shortmid" ?∣)
566 ("\\shortparallel" ?∥)
567 ("\\sim" ?∼)
568 ("\\simeq" ?≃)
569 ("\\smallamalg" ?∐)
570 ("\\smallsetminus" ?∖)
571 ("\\smallsmile" ?⌣)
572 ("\\smile" ?⌣)
573 ("\\spadesuit" ?♠)
574 ("\\sphericalangle" ?∢)
575 ("\\sqcap" ?⊓)
576 ("\\sqcup" ?⊔)
577 ("\\sqsubset" ?⊏)
578 ("\\sqsubseteq" ?⊑)
579 ("\\sqsupset" ?⊐)
580 ("\\sqsupseteq" ?⊒)
581 ("\\square" ?□)
582 ("\\squigarrowright" ?⇝)
583 ("\\star" ?⋆)
584 ("\\straightphi")
585 ("\\subset" ?⊂)
586 ("\\subseteq" ?⊆)
587 ("\\subseteqq" ?⊆)
588 ("\\subsetneq" ?⊊)
589 ("\\subsetneqq" ?⊊)
590 ("\\succ" ?≻)
591 ("\\succapprox" ?≿)
592 ("\\succcurlyeq" ?≽)
593 ("\\succeq" ?≽)
594 ("\\succnapprox" ?⋩)
595 ("\\succnsim" ?⋩)
596 ("\\succsim" ?≿)
597 ("\\sum" ?∑)
598 ("\\supset" ?⊃)
599 ("\\supseteq" ?⊇)
600 ("\\supseteqq" ?⊇)
601 ("\\supsetneq" ?⊋)
602 ("\\supsetneqq" ?⊋)
603 ("\\surd" ?√)
604 ("\\swarrow" ?↙)
605 ("\\therefore" ?∴)
606 ("\\thickapprox" ?≈)
607 ("\\thicksim" ?∼)
608 ("\\to" ?→)
609 ("\\top" ?⊤)
610 ("\\triangle" ?▵)
611 ("\\triangledown" ?▿)
612 ("\\triangleleft" ?◃)
613 ("\\trianglelefteq" ?⊴)
614 ("\\triangleq" ?≜)
615 ("\\triangleright" ?▹)
616 ("\\trianglerighteq" ?⊵)
617 ("\\twoheadleftarrow" ?↞)
618 ("\\twoheadrightarrow" ?↠)
619 ("\\ulcorner" ?⌜)
620 ("\\uparrow" ?↑)
621 ("\\updownarrow" ?↕)
622 ("\\upleftharpoon" ?↿)
623 ("\\uplus" ?⊎)
624 ("\\uprightharpoon" ?↾)
625 ("\\upuparrows" ?⇈)
626 ("\\urcorner" ?⌝)
627 ("\\u{i}")
628 ("\\vDash" ?⊨)
630 ((lambda (name char)
631 (concat "\\var" (downcase (match-string 1 name))))
632 "\\`GREEK \\([^- ]+\\) SYMBOL\\'")
634 ("\\varprime" ?′)
635 ("\\varpropto" ?∝)
636 ("\\varsigma") ;FIXME: Looks reversed with the non\var.
637 ("\\vartriangleleft" ?⊲)
638 ("\\vartriangleright" ?⊳)
639 ("\\vdash" ?⊢)
640 ("\\vdots" ?⋮)
641 ("\\vee" ?∨)
642 ("\\veebar" ?⊻)
643 ("\\vert" ?|)
644 ("\\wedge" ?∧)
645 ("\\wp" ?℘)
646 ("\\wr" ?≀)
648 ("\\Bbb{N}" ?ℕ) ; AMS commands for blackboard bold
649 ("\\Bbb{P}" ?ℙ) ; Also sometimes \mathbb.
650 ("\\Bbb{R}" ?ℝ)
651 ("\\Bbb{Z}" ?ℤ)
652 ("--" ?–)
653 ("---" ?—)
654 ;; We used to use ~ for NBSP but that's inconvenient and may even look like
655 ;; a bug where the user finds his ~ key doesn't insert a ~ any more.
656 ("\\ ")
657 ("\\\\" ?\\)
658 ("\\mathscr{I}" ?ℐ) ; moment of inertia
659 ("\\Smiley" ?☺)
660 ("\\blacksmiley" ?☻)
661 ("\\Frowny" ?☹)
662 ("\\Letter" ?✉)
663 ("\\permil" ?‰)
664 ;; Probably not useful enough:
665 ;; ("\\Telefon" ?☎) ; there are other possibilities
666 ;; ("\\Radioactivity" ?☢)
667 ;; ("\Biohazard" ?☣)
668 ;; ("\\Male" ?♂)
669 ;; ("\\Female" ?♀)
670 ;; ("\\Lightning" ?☇)
671 ;; ("\\Mercury" ?☿)
672 ;; ("\\Earth" ?♁)
673 ;; ("\\Jupiter" ?♃)
674 ;; ("\\Saturn" ?♄)
675 ;; ("\\Uranus" ?♅)
676 ;; ("\\Neptune" ?♆)
677 ;; ("\\Pluto" ?♇)
678 ;; ("\\Sun" ?☉)
679 ;; ("\\Writinghand" ?✍)
680 ;; ("\\Yinyang" ?☯)
681 ;; ("\\Heart" ?♡)
682 ("\\dh")
683 ("\\DH")
684 ("\\th")
685 ("\\TH")
686 ("\\lnot")
687 ("\\ordfeminine")
688 ("\\ordmasculine")
689 ("\\lambdabar")
690 ("\\celsius" ?℃)
691 ;; by analogy with lq, rq:
692 ("\\ldq" ?\“)
693 ("\\rdq" ?\”)
694 ("\\defs" ?≙) ; per fuzz/zed
695 ;; ("\\sqrt[3]" ?∛)
696 ("\\llbracket" ?\〚) ; stmaryrd
697 ("\\rrbracket" ?\〛)
698 ;; ("\\lbag" ?\〚) ; fuzz
699 ;; ("\\rbag" ?\〛)
700 ("\\ldata" ?\《) ; fuzz/zed
701 ("\\rdata" ?\》)
702 ;; From Karl Eichwalder.
703 ("\\glq" ?‚)
704 ("\\grq" ?‘)
705 ("\\glqq" ?„) ("\\\"`" ?„)
706 ("\\grqq" ?“) ("\\\"'" ?“)
707 ("\\flq" ?‹)
708 ("\\frq" ?›)
709 ("\\flqq" ?\«) ("\\\"<" ?\«)
710 ("\\frqq" ?\») ("\\\">" ?\»)
712 ("\\-") ;; soft hyphen
714 ("\\textmu")
715 ("\\textfractionsolidus" ?⁄)
716 ("\\textbigcircle" ?⃝)
717 ("\\textmusicalnote" ?♪)
718 ("\\textdied" ?✝)
719 ("\\textcolonmonetary" ?₡)
720 ("\\textwon" ?₩)
721 ("\\textnaira" ?₦)
722 ("\\textpeso" ?₱)
723 ("\\textlira" ?₤)
724 ("\\textrecipe" ?℞)
725 ("\\textinterrobang" ?‽)
726 ("\\textpertenthousand" ?‱)
727 ("\\textbaht" ?฿)
728 ("\\textnumero" ?№)
729 ("\\textdiscount" ?⁒)
730 ("\\textestimated" ?℮)
731 ("\\textopenbullet" ?◦)
732 ("\\textlquill" ?⁅)
733 ("\\textrquill" ?⁆)
734 ("\\textcircledP" ?℗)
735 ("\\textreferencemark" ?※)
738 ;;; latin-ltx.el ends here