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