annotate yatexmth.el @ 11:390df0e505da

Label completion works.
author yuuji
date Mon, 20 Sep 1993 08:56:09 +0000
parents
children eafae54794a0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
390df0e505da Label completion works.
yuuji
parents:
diff changeset
1 ;;; -*- Emacs-Lisp -*-
390df0e505da Label completion works.
yuuji
parents:
diff changeset
2 ;;; YaTeX interface for math-mode.
390df0e505da Label completion works.
yuuji
parents:
diff changeset
3 ;;; yatexmth.el rev.0
390df0e505da Label completion works.
yuuji
parents:
diff changeset
4 ;;; (C)1993 by HIROSE Yuuji [yuuji@ae.keio.ac.jp]
390df0e505da Label completion works.
yuuji
parents:
diff changeset
5 ;;; Last modified Tue Aug 3 23:37:07 1993 on 98fa
390df0e505da Label completion works.
yuuji
parents:
diff changeset
6 ;;; $Id$
390df0e505da Label completion works.
yuuji
parents:
diff changeset
7
390df0e505da Label completion works.
yuuji
parents:
diff changeset
8 (setq
390df0e505da Label completion works.
yuuji
parents:
diff changeset
9 YaTeX-math-key-alist-default
390df0e505da Label completion works.
yuuji
parents:
diff changeset
10 '(
390df0e505da Label completion works.
yuuji
parents:
diff changeset
11 ;frequently used
390df0e505da Label completion works.
yuuji
parents:
diff changeset
12 ("||" "|" ("||" "a"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
13 ("sum" "sum" ("\\-+\n >\n/-+" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
14 ("sigma" "sum" ("\\-+\n >\n/-+" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
15 ("integral" "int" " /\\\n \\\n\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
16 ("ointegral" "oint" " /\\\n(\\)\n\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
17 ("A" "forall" "|_|\nV")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
18 ("E" "exists" "-+\n-+\n-+")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
19 ("!" "neg" "--+\n |")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
20 ("oo" "infty" ("oo" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
21 ("\\" "backslash" ("\\" "_"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
22
390df0e505da Label completion works.
yuuji
parents:
diff changeset
23 ;;binary operators
390df0e505da Label completion works.
yuuji
parents:
diff changeset
24 ("+-" "pm" ("+\n-" "}"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
25 ("-+" "mp" "-\n+")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
26 ("x" "times" ("x" "~"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
27 ("/" "div" (",\n-\n'" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
28 ("*" "ast" "*")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
29 ("#" "star" ("_/\\_\n\\ /\n//\\\\" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
30 ("o" "circ" "o")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
31 ("o*" "bullet" " _\n(*)\n ~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
32 ("." "cdot" ".")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
33 ("cap" "cap" "/-\\\n| |")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
34 ("cup" "cup" "| |\n\\-/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
35 ("u+" "uplus" "|+|\n\\-/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
36 ("|~|" "sqcap" "|~|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
37 ("|_|" "sqcup" "|_|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
38 ("v" "vee" "v")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
39 ("^" "wedge" "^")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
40 ("\\\\" "setminus" "\\")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
41 (")(" "wr" " )\n(")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
42 ("<>" "diamond" "<>")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
43 ("/\-" "bigtriangleup" ("/\\\n~~" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
44 ("-\\/" "bigtriangledown" ("__\n\\/" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
45 ("<|" "triangleleft" "<|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
46 ("|>" "triangleright" "|>")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
47 ("<||" "lhd" "/|\n\\|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
48 ("||>" "rhd" "|\\\n|/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
49 ("<|-" "unlhd" "<|\n~~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
50 ("|>-" "unrhd" "|>\n~~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
51 ("o+" "oplus" " _\n(+)\n ~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
52 ("o-" "ominus" " _\n(-)\n ~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
53 ("ox" "otimes" " _\n(x)\n ~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
54 ("o/" "oslash" " _\n(/)\n ~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
55 ("o." "odot" "(.)")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
56 ("O" "bigcirc" "O")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
57 ("t" "dagger" "+\n|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
58 ("tt" "ddagger" "+\n+\n|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
59 ("II" "amalg" "II")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
60 ; :
390df0e505da Label completion works.
yuuji
parents:
diff changeset
61 ;;relational operators
390df0e505da Label completion works.
yuuji
parents:
diff changeset
62 ("<" "leq" ("<\n-" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
63 (">" "geq" (">\n-" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
64 ("-=" "equiv" "=\n-")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
65 ("=-" "equiv" "=\n-")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
66 ("---" "equiv" "=\n-")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
67 ("(" "subset" " _\n(\n ~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
68 ("(-" "subseteq" " _\n(_\n~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
69 (")" "supset" "_\n )\n~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
70 (")-" "supseteq" "_\n_)\n~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
71 ("[" "sqsubset" "[")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
72 ("[-" "sqsubseteq" "[\n~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
73 ("]" "sqsupset" "]")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
74 ("]-" "sqsupseteq" "]\n~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
75 ("{" "in" "(-")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
76 ("}" "ni" "-)")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
77 ("|-" "vdash" "|-")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
78 ("-|" "dashv" "-|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
79 ("~" "sim" "~(tild)")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
80 ("~-" "simeq" "~\n-")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
81 ("asymp" "asymp" "v\n^")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
82 ("~~" "approx" "~\n~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
83 ("~=" "cong" "~\n=")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
84 ("=/" "neq" ("=/=" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
85 (".=" "doteq" ".\n=")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
86 ("o<" "propto" "o<")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
87 ("|=" "models" "|=")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
88 ("_|_" "perp" "_|_")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
89 ("|" "mid" "|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
90 ("||" "parallel" "||")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
91 ("bowtie" "bowtie" "|><|(wide)")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
92 ("|><|" "join" "|><|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
93 ("\\_/" "smile" "\\_/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
94 ("/~\\" "frown" "/~~\\")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
95 ("-<" "prec" ("-<" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
96 ("-<=" "preceq" ("-<\n-" "\n="))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
97 ("<<" "ll" ("<<" "s"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
98 ; :
390df0e505da Label completion works.
yuuji
parents:
diff changeset
99 ;;arrows
390df0e505da Label completion works.
yuuji
parents:
diff changeset
100 ("<-" "leftarrow" ("<-" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
101 ("<--" "longleftarrow" ("<-" "--"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
102 ("<=" "Leftarrow" "<=")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
103 ("<==" "Longleftarrow" "<==")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
104 ("->" "rightarrow" ("->" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
105 ("-->" "longrightarrow" ("-->" "--"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
106 ("==>" "Longrightarrow" "==>")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
107 ("<->" "leftrightarrow" ("<->" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
108 ("<-->" "longleftrightarrow" ("<---->" "--"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
109 ("<=>" "leftrightarrow" "<=>")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
110 ("<==>" "Longleftrightarrow" "<==>")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
111 ("^|" "uparrow" ("^\n|" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
112 ("^||" "Uparrow" "/\\\n||")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
113 ("\C-n" "downarrow" ("|\nv" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
114 ("^|" "uparrow" ("^\n|" ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
115 ("|->" "mapsto" ("|->" "|"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
116 ("<-)" "hookleftarrow" (" ,\n<--+" " R\n<--/"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
117 ("/-" "leftharpoonup" "/\n~~~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
118 ("\\-" "leftharpoondown" "__\n\\")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
119 ("-/" "rightharpoondown" "__\n/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
120 ("-\\" "rightharpoonup" "~~\n\\")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
121 ;other marks
390df0e505da Label completion works.
yuuji
parents:
diff changeset
122 ("Z" "aleph" "|\\|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
123 ("|\\|" "aleph" "|\\|")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
124 ("h-" "hbar" "_\nh")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
125 ("i" "imath" "i")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
126 ("j" "jmath" "j")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
127 ("l" "ell" "l")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
128 ("wp" "wp" "???")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
129 ("R" "Re" ")R")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
130 ("Im" "Im" "???")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
131 ("mho" "mho" "~|_|~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
132 ("'" "prime" "'")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
133 ("0" "emptyset" "0")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
134 ("nabla" "nabla" "___\n\\\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
135 ("\\/" "surd" "-\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
136 ("surd" "surd" "-\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
137 ("top" "top" "T")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
138 ("bot" "bot" "_|_")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
139 ("b" "flat" "b")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
140 ("LT" "natural" "|\nLT\n |")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
141 ("6" "partial" " -+\n+-+\n+-+")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
142 ("partial" "partial" " -+\n+-+\n+-+")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
143 ("round" "partial" " -+\n+-+\n+-+")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
144 ("[]" "box" "[]")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
145 ("Diamond" "Diamond" "/\\\n\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
146 ("3" "triangle" "/\\\n~~")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
147 ("C" "clubsuit" " o\no+o\n |")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
148 ("D" "diamondsuit" "/\\\n\\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
149 ("H" "heartsuit" "<^^>\n \\/")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
150 ("S" "spadesuit" " /\\\n<++>\n /\\")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
151
390df0e505da Label completion works.
yuuji
parents:
diff changeset
152 ))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
153
390df0e505da Label completion works.
yuuji
parents:
diff changeset
154 (defvar YaTeX-math-key-alist-private nil
390df0e505da Label completion works.
yuuji
parents:
diff changeset
155 "*User definable key vs LaTeX-math-command alist.")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
156
390df0e505da Label completion works.
yuuji
parents:
diff changeset
157 (defvar YaTeX-math-quit-with-strict-match nil
390df0e505da Label completion works.
yuuji
parents:
diff changeset
158 "*T for quitting completion as soon as strict-match is found.")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
159 (setq YaTeX-math-key-alist
390df0e505da Label completion works.
yuuji
parents:
diff changeset
160 (append YaTeX-math-key-alist-private YaTeX-math-key-alist-default))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
161
390df0e505da Label completion works.
yuuji
parents:
diff changeset
162 (setq YaTeX-math-key-array
390df0e505da Label completion works.
yuuji
parents:
diff changeset
163 (let ((array (make-vector (length YaTeX-math-key-alist) ""))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
164 (list YaTeX-math-key-alist) (i 0))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
165 (while list
390df0e505da Label completion works.
yuuji
parents:
diff changeset
166 (aset array i (car (car list)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
167 (setq i (1+ i) list (cdr list)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
168 array))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
169
390df0e505da Label completion works.
yuuji
parents:
diff changeset
170 (defvar YaTeX-ec "\\" "Escape character of mark-up language.")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
171 (setq YaTeX-math-indicator
390df0e505da Label completion works.
yuuji
parents:
diff changeset
172 "KEY\tLaTeX sequence\t\tsign")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
173
390df0e505da Label completion works.
yuuji
parents:
diff changeset
174 (defvar YaTeX-math-need-image t
390df0e505da Label completion works.
yuuji
parents:
diff changeset
175 "*T for displaying pseudo image momentarily.")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
176 (defvar YaTeX-math-max-key 8)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
177 (defvar YaTeX-math-max-seq
390df0e505da Label completion works.
yuuji
parents:
diff changeset
178 (* 8 (1+ (/ (length "\\longleftrightarrow") 8))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
179 (defvar YaTeX-math-max-sign 5)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
180 (defvar YaTeX-math-sign-width
390df0e505da Label completion works.
yuuji
parents:
diff changeset
181 (+ YaTeX-math-max-key YaTeX-math-max-seq YaTeX-math-max-sign))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
182 (defvar YaTeX-math-display-width
390df0e505da Label completion works.
yuuji
parents:
diff changeset
183 (* 8 (1+ (/ YaTeX-math-sign-width 8))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
184 (defvar YaTeX-math-menu-map nil
390df0e505da Label completion works.
yuuji
parents:
diff changeset
185 "Keymap used in YaTeX mathematical sign menu mode."
390df0e505da Label completion works.
yuuji
parents:
diff changeset
186 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
187 (if YaTeX-math-menu-map nil
390df0e505da Label completion works.
yuuji
parents:
diff changeset
188 (setq YaTeX-math-menu-map (make-sparse-keymap))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
189 (define-key YaTeX-math-menu-map "n" 'next-line)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
190 (define-key YaTeX-math-menu-map "p" 'previous-line)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
191 (define-key YaTeX-math-menu-map "f" 'YaTeX-math-forward)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
192 (define-key YaTeX-math-menu-map "b" 'YaTeX-math-backward)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
193 (define-key YaTeX-math-menu-map "v" 'scroll-up)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
194 (define-key YaTeX-math-menu-map " " 'scroll-up)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
195 (define-key YaTeX-math-menu-map "c" 'scroll-up)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
196 (define-key YaTeX-math-menu-map "V" 'scroll-down)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
197 (define-key YaTeX-math-menu-map "r" 'scroll-down)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
198 (define-key YaTeX-math-menu-map "\^h" 'scroll-down)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
199 (define-key YaTeX-math-menu-map "<" 'beginning-of-buffer)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
200 (define-key YaTeX-math-menu-map ">" 'end-of-buffer)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
201 (define-key YaTeX-math-menu-map "\^m" 'exit-recursive-edit)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
202 (define-key YaTeX-math-menu-map "q" 'abort-recursive-edit))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
203
390df0e505da Label completion works.
yuuji
parents:
diff changeset
204 (defmacro YaTeX-math-japanese-sign (list)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
205 (list 'nth 1 list))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
206
390df0e505da Label completion works.
yuuji
parents:
diff changeset
207 (defvar YaTeX-math-cmd-regexp (concat (regexp-quote YaTeX-ec) "[A-z]"))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
208
390df0e505da Label completion works.
yuuji
parents:
diff changeset
209 (defun YaTeX-math-forward (arg)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
210 (interactive "p")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
211 (re-search-forward YaTeX-math-cmd-regexp nil t arg))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
212
390df0e505da Label completion works.
yuuji
parents:
diff changeset
213 (defun YaTeX-math-backward (arg)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
214 (interactive "p")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
215 (re-search-backward YaTeX-math-cmd-regexp nil t arg))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
216
390df0e505da Label completion works.
yuuji
parents:
diff changeset
217 (defun YaTeX-math-get-sign (list)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
218 (let ((sign (car (cdr (cdr list)))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
219 (if (listp sign)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
220 (setq sign (cond
390df0e505da Label completion works.
yuuji
parents:
diff changeset
221 (YaTeX-japan (YaTeX-math-japanese-sign sign))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
222 (t (car sign)))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
223 sign)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
224 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
225
390df0e505da Label completion works.
yuuji
parents:
diff changeset
226 (defun YaTeX-math-display-list (list cols)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
227 (goto-char (point-max))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
228 (if (= cols 0) (if (not (eolp)) (newline 1))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
229 (forward-line -1)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
230 (while (looking-at "[ \t\n]") (forward-line -1)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
231 (end-of-line)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
232 (let ((indent (* YaTeX-math-display-width cols)) sign str to)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
233 (indent-to indent)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
234 (insert (car list))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
235 (indent-to (setq indent (+ indent YaTeX-math-max-key)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
236 (insert "\\" (car (cdr list)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
237 (setq indent (+ indent YaTeX-math-max-seq))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
238 (setq sign (YaTeX-math-get-sign list))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
239 (while (not (string= "" sign))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
240 (setq to (string-match "\n" sign)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
241 str (if to (substring sign 0 to) sign))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
242 (end-of-line)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
243 (indent-to indent)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
244 (insert str)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
245 (cond ((eobp) (newline 1))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
246 ((> cols 0) (forward-line 1)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
247 (setq sign (if to (substring sign (1+ to)) "")))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
248
390df0e505da Label completion works.
yuuji
parents:
diff changeset
249 (defvar YaTeX-math-menu-buffer "*math-mode-signs*")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
250
390df0e505da Label completion works.
yuuji
parents:
diff changeset
251 (defun YaTeX-math-show-menu (match-str)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
252 (save-window-excursion
390df0e505da Label completion works.
yuuji
parents:
diff changeset
253 (pop-to-buffer YaTeX-math-menu-buffer)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
254 (let ((maxcols (max 1 (/ (screen-width) YaTeX-math-sign-width)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
255 (case-fold-search nil)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
256 (cols 0) (list YaTeX-math-key-alist) command)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
257 (erase-buffer)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
258 (insert YaTeX-math-indicator "\t")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
259 (insert YaTeX-math-indicator)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
260 (newline 1)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
261 (insert-char ?- (1- (screen-width)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
262 (newline 1)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
263 (while list
390df0e505da Label completion works.
yuuji
parents:
diff changeset
264 (if (string-match match-str (car (car list)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
265 (progn (YaTeX-math-display-list (car list) cols)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
266 (setq cols (% (1+ cols) maxcols))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
267 (setq list (cdr list)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
268 (goto-char (point-min))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
269 (use-local-map YaTeX-math-menu-map)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
270 (unwind-protect
390df0e505da Label completion works.
yuuji
parents:
diff changeset
271 (recursive-edit)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
272 (skip-chars-backward "^ \t\n")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
273 (setq command
390df0e505da Label completion works.
yuuji
parents:
diff changeset
274 (if (re-search-forward YaTeX-math-cmd-regexp nil t)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
275 (buffer-substring
390df0e505da Label completion works.
yuuji
parents:
diff changeset
276 (match-beginning 0)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
277 (prog2 (skip-chars-forward "^ \t\n") (point)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
278 nil))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
279 (kill-buffer YaTeX-math-menu-buffer))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
280 command))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
281 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
282
390df0e505da Label completion works.
yuuji
parents:
diff changeset
283 ;
390df0e505da Label completion works.
yuuji
parents:
diff changeset
284 (defun YaTeX-math-show-image (image &optional exit-char)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
285 "Momentarily display IMAGE at the beginning of the next line;
390df0e505da Label completion works.
yuuji
parents:
diff changeset
286 erase it on the next keystroke. The window is recentered if necessary
390df0e505da Label completion works.
yuuji
parents:
diff changeset
287 to make the whole string visible. If the window isn't large enough,
390df0e505da Label completion works.
yuuji
parents:
diff changeset
288 at least you get to read the beginning."
390df0e505da Label completion works.
yuuji
parents:
diff changeset
289 (let ((buffer-read-only nil)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
290 (modified (buffer-modified-p))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
291 (name buffer-file-name)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
292 insert-start
390df0e505da Label completion works.
yuuji
parents:
diff changeset
293 insert-end)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
294 (unwind-protect
390df0e505da Label completion works.
yuuji
parents:
diff changeset
295 (progn
390df0e505da Label completion works.
yuuji
parents:
diff changeset
296 (save-excursion
390df0e505da Label completion works.
yuuji
parents:
diff changeset
297 ;; defeat file locking... don't try this at home, kids!
390df0e505da Label completion works.
yuuji
parents:
diff changeset
298 (setq buffer-file-name nil)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
299 (forward-line 1)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
300 (setq insert-start (point))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
301 (if (eobp) (newline))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
302 (insert image)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
303 (setq insert-end (point)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
304 ; make sure the whole string is visible
390df0e505da Label completion works.
yuuji
parents:
diff changeset
305 (if (not (pos-visible-in-window-p insert-end))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
306 (recenter (max 0
390df0e505da Label completion works.
yuuji
parents:
diff changeset
307 (- (window-height)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
308 (count-lines insert-start insert-end)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
309 2))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
310 (let ((char (read-char)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
311 (or (eq char exit-char)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
312 (setq unread-command-char char))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
313 (if insert-end
390df0e505da Label completion works.
yuuji
parents:
diff changeset
314 (save-excursion
390df0e505da Label completion works.
yuuji
parents:
diff changeset
315 (delete-region insert-start insert-end)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
316 (setq buffer-file-name name)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
317 (set-buffer-modified-p modified))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
318
390df0e505da Label completion works.
yuuji
parents:
diff changeset
319 (defun YaTeX-math-insert-sequence ()
390df0e505da Label completion works.
yuuji
parents:
diff changeset
320 (interactive)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
321 (let ((key "") regkey str last-char list i
390df0e505da Label completion works.
yuuji
parents:
diff changeset
322 (case-fold-search nil) match
390df0e505da Label completion works.
yuuji
parents:
diff changeset
323 (n (length YaTeX-math-key-array)) (beg (point)) result)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
324 (setq result
390df0e505da Label completion works.
yuuji
parents:
diff changeset
325 (catch 'complete
390df0e505da Label completion works.
yuuji
parents:
diff changeset
326 (while t
390df0e505da Label completion works.
yuuji
parents:
diff changeset
327 (setq last-char (read-char)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
328 key (concat key (char-to-string last-char))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
329 regkey (concat "^" (regexp-quote key)) i 0)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
330 (cond
390df0e505da Label completion works.
yuuji
parents:
diff changeset
331 ((string= key YaTeX-math-invoke-key) ;;invoke key itself
390df0e505da Label completion works.
yuuji
parents:
diff changeset
332 (throw 'complete 'escape))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
333 ((string-match "[\C-g\C-c]" key) (throw 'complete 'abort))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
334 ((string-match "[\n\r]" key) (throw 'complete 'menu)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
335 (if
390df0e505da Label completion works.
yuuji
parents:
diff changeset
336 (catch 'found
390df0e505da Label completion works.
yuuji
parents:
diff changeset
337 ;;(1)input string strictly matches with alist
390df0e505da Label completion works.
yuuji
parents:
diff changeset
338 (setq single-command (car (cdr match))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
339 ;;remember previous match
390df0e505da Label completion works.
yuuji
parents:
diff changeset
340 match (assoc key YaTeX-math-key-alist))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
341 ;;(2)search partial match into alist
390df0e505da Label completion works.
yuuji
parents:
diff changeset
342 (while (< i n)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
343 (if (string-match
390df0e505da Label completion works.
yuuji
parents:
diff changeset
344 regkey (aref YaTeX-math-key-array i))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
345 (progn
390df0e505da Label completion works.
yuuji
parents:
diff changeset
346 (or match
390df0e505da Label completion works.
yuuji
parents:
diff changeset
347 (setq match (nth i YaTeX-math-key-alist)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
348 (throw 'found t)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
349 (setq i (1+ i)))) ;catch 'found
390df0e505da Label completion works.
yuuji
parents:
diff changeset
350 nil ;;if any match, continue reading
390df0e505da Label completion works.
yuuji
parents:
diff changeset
351 ;;else reading of sequence has been done.
390df0e505da Label completion works.
yuuji
parents:
diff changeset
352 (message "complete.")
390df0e505da Label completion works.
yuuji
parents:
diff changeset
353 (throw 'complete t)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
354 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
355 (if match
390df0e505da Label completion works.
yuuji
parents:
diff changeset
356 (progn (delete-region beg (point))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
357 (insert YaTeX-ec (car (cdr match)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
358 (if YaTeX-math-need-image
390df0e505da Label completion works.
yuuji
parents:
diff changeset
359 (YaTeX-math-show-image
390df0e505da Label completion works.
yuuji
parents:
diff changeset
360 (concat (YaTeX-math-get-sign match) "\n")))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
361 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
362 nil)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
363 )))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
364 (cond
390df0e505da Label completion works.
yuuji
parents:
diff changeset
365 ((eq result t)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
366 (setq YaTeX-current-completion-type 'maketitle)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
367 (if t nil
390df0e505da Label completion works.
yuuji
parents:
diff changeset
368 (delete-region beg (point))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
369 (setq single-command (car (cdr match)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
370 ;;(recursive-edit)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
371 (insert YaTeX-ec single-command)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
372 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
373 (sit-for 1)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
374 (setq unread-command-char last-char)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
375 (insert (YaTeX-addin single-command)))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
376 ((eq result 'abort)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
377 (delete-region beg (point))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
378 (message "Abort."))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
379 ((eq result 'escape)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
380 (delete-region beg (point))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
381 (insert YaTeX-math-invoke-key))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
382 ((eq result 'menu)
390df0e505da Label completion works.
yuuji
parents:
diff changeset
383 (delete-region beg (point))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
384 (setq key (concat "^" (regexp-quote (substring key 0 -1))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
385 (insert (YaTeX-math-show-menu key)))))
390df0e505da Label completion works.
yuuji
parents:
diff changeset
386 )
390df0e505da Label completion works.
yuuji
parents:
diff changeset
387 ;;
390df0e505da Label completion works.
yuuji
parents:
diff changeset
388 (provide 'yatexmth)

yatex.org