Mercurial > hgrepos > hgweb.cgi > yatex
annotate yatexmth.el @ 47:d7e7b4654058
Support special popup frame.
Refine highlightening method.
On Emacs-19, couldn't save user completion table correctly, fixed.
author | yuuji |
---|---|
date | Mon, 24 Oct 1994 17:26:47 +0000 |
parents | 433b27a11019 |
children | b0371b6ed799 |
rev | line source |
---|---|
11 | 1 ;;; -*- Emacs-Lisp -*- |
23 | 2 ;;; YaTeX math-mode-specific functions. |
13 | 3 ;;; yatexmth.el rev.2 |
14 | 4 ;;; (c )1993-1994 by HIROSE Yuuji [yuuji@ae.keio.ac.jp] |
47 | 5 ;;; Last modified Tue Oct 11 22:57:43 1994 on figaro |
11 | 6 ;;; $Id$ |
7 | |
13 | 8 ;;; [Customization guide] |
9 ;;; | |
10 ;;; By default, you can use two completion groups in YaTeX math | |
23 | 11 ;;; mode, `;' for mathematical signs and `/' for greek letters. But |
13 | 12 ;;; you can add other completion groups by defining the alist of |
13 ;;; `prefix key' vs `completion list' into the variable | |
14 ;;; YaTeX-math-key-list-private. If you wish to accomplish the | |
23 | 15 ;;; completion as follows(prefix key is `,'): |
13 | 16 ;;; |
17 ;;; KEY COMPLETION | |
18 ;;; s \sin | |
19 ;;; S \arcsin | |
20 ;;; c \cos | |
21 ;;; C \arccos | |
22 ;;; : | |
23 ;;; T \arctan | |
24 ;;; l \log | |
25 ;;; hs \sinh | |
26 ;;; | |
23 | 27 ;;; Typing `s' after `,' makes `\sin', `hs' after `,' makes `\sinh' |
13 | 28 ;;; and so on. First, you have to define list of key-completion |
29 ;;; pairs. Variable name(YaTeX-math-funcs-list) is arbitrary. | |
30 ;;; | |
31 ;;; (setq YaTeX-math-funcs-list | |
32 ;;; '(("s" "sin") | |
33 ;;; ("S" "arcsin") | |
34 ;;; : | |
35 ;;; ("hs" "sinh"))) | |
36 ;;; | |
37 ;;; Next, define the list of prefix-key vs completion list(defined | |
38 ;;; above) into the variable YaTeX-math-key-list-private. | |
39 ;;; | |
40 ;;; (setq YaTeX-math-key-list-private | |
23 | 41 ;;; '(("," . YaTeX-math-funcs-list) |
13 | 42 ;;; ("'" . Other-List-if-any))) |
43 ;;; | |
44 ;;; Put these expressions into your ~/.emacs, and you can use this | |
45 ;;; completion in the YaTeX-math-mode. | |
46 ;;; | |
47 ;;; And you can add your favorite completion sequences to the | |
23 | 48 ;;; default completion list invoked with `;', by defining those lists |
13 | 49 ;;; into variable YaTeX-math-sign-alist-private. |
50 | |
51 ;;; 【イメージ補完の追加方法】 | |
52 ;;; | |
23 | 53 ;;; 標準のイメージ補完では、「;」で始まる数式記号補完と、「/」で始 |
13 | 54 ;;; まるギリシャ文字補完が使用可能ですが、これ以外の文字で始まる補完 |
23 | 55 ;;; シリーズも定義することができます。例えば、「,」で始まる次のよう |
13 | 56 ;;; な補完シリーズを定義する場合を考えてみます。 |
57 ;;; | |
58 ;;; 補完キー 補完結果 | |
59 ;;; s \sin | |
60 ;;; S \arcsin | |
61 ;;; c \cos | |
62 ;;; C \arccos | |
63 ;;; : | |
64 ;;; T \arctan | |
65 ;;; l \log | |
66 ;;; hs \sinh | |
67 ;;; | |
23 | 68 ;;; 「,」のあとに s を押すと \sin が、hs を押すと \sinh が入力されま |
13 | 69 ;;; す。このような補完リストの登録は以下のようにします(変数名は任意)。 |
70 ;;; | |
71 ;;; (setq YaTeX-math-funcs-list | |
72 ;;; '(("s" "sin") | |
73 ;;; ("S" "arcsin") | |
74 ;;; : | |
75 ;;; ("hs" "sinh"))) | |
76 ;;; | |
23 | 77 ;;; さらに、「,」を押した時にイメージ補完が始まるよう次の変数に、起動キー |
13 | 78 ;;; と上で定義した補完用変数の登録を行ないます。 |
79 ;;; | |
80 ;;; (setq YaTeX-math-key-list-private | |
23 | 81 ;;; '(("," . YaTeX-math-funcs-list) |
13 | 82 ;;; ("'" . ほかに定義したいシリーズがあれば…))) |
83 ;;; | |
84 ;;; これらを ~/.emacs に書いておけば、野鳥の math-mode で自分専用の | |
85 ;;; イメージ補完が利用できます。 | |
86 | |
87 (defvar YaTeX-jisold | |
88 (and (boundp 'dos-machine-type) | |
89 (eq dos-machine-type 'pc98))) | |
90 | |
91 (defmacro YaTeX-setq-math-sym (sym old new) | |
92 (list 'setq sym (list 'if 'YaTeX-jisold old new))) | |
93 | |
94 (YaTeX-setq-math-sym YaTeX-image-in "E" "∈") | |
95 (YaTeX-setq-math-sym YaTeX-image-ni "ヨ" "∋") | |
96 (YaTeX-setq-math-sym YaTeX-image-subset " _\n(\n ~" "⊂") | |
97 (YaTeX-setq-math-sym YaTeX-image-subseteq " _\n(_\n ~" "⊆") | |
98 (YaTeX-setq-math-sym YaTeX-image-supset "_\n )\n~" "⊃") | |
99 (YaTeX-setq-math-sym YaTeX-image-supseteq "_\n_)\n~" "⊇") | |
100 (YaTeX-setq-math-sym YaTeX-image-nabla "___\n\\\\/" "∇") | |
101 (YaTeX-setq-math-sym YaTeX-image-partial " -+\n+-+\n+-+" "∂") | |
102 (YaTeX-setq-math-sym YaTeX-image-dagger "+\n|" "†") | |
103 (YaTeX-setq-math-sym YaTeX-image-ddagger "+\n+\n|" "‡") | |
104 (YaTeX-setq-math-sym YaTeX-image-equiv "=\n ̄" "≡") | |
105 (YaTeX-setq-math-sym YaTeX-image-int " /\\\n \\\n\\/" "∫") | |
106 (YaTeX-setq-math-sym YaTeX-image-bot "|\n ̄" "⊥") | |
107 (YaTeX-setq-math-sym YaTeX-image-neg "イ" "¬") | |
108 (YaTeX-setq-math-sym YaTeX-image-flat "b" "♭") | |
23 | 109 (YaTeX-setq-math-sym YaTeX-image-sqrt "" "√") |
13 | 110 |
11 | 111 (setq |
13 | 112 YaTeX-math-sign-alist-default |
11 | 113 '( |
114 ;frequently used | |
115 ("||" "|" ("||" "‖")) | |
116 ("sum" "sum" ("\\-+\n >\n/-+" "Σ")) | |
117 ("sigma" "sum" ("\\-+\n >\n/-+" "Σ")) | |
13 | 118 ("integral" "int" (" /\\\n \\\n\\/" YaTeX-image-int)) |
11 | 119 ("ointegral" "oint" " /\\\n(\\)\n\\/") |
23 | 120 ("sqrt" "sqrt" (" __\n,/" YaTeX-image-sqrt)) |
121 ("root" "sqrt" (" __\n,/" YaTeX-image-sqrt)) | |
11 | 122 ("A" "forall" "|_|\nV") |
123 ("E" "exists" "-+\n-+\n-+") | |
13 | 124 ("!" "neg" ("--+\n |" YaTeX-image-neg)) |
11 | 125 ("oo" "infty" ("oo" "∞")) |
126 ("\\" "backslash" ("\\" "\")) | |
127 | |
128 ;;binary operators | |
129 ("+-" "pm" ("+\n-" "±")) | |
130 ("-+" "mp" "-\n+") | |
131 ("x" "times" ("x" "×")) | |
132 ("/" "div" (",\n-\n'" "÷")) | |
23 | 133 ("f" "frac" "xxx\n---\nyyy" "÷") |
11 | 134 ("*" "ast" "*") |
135 ("#" "star" ("_/\\_\n\\ /\n//\\\\" "★")) | |
136 ("o" "circ" "o") | |
137 ("o*" "bullet" " _\n(*)\n ~") | |
138 ("." "cdot" ".") | |
139 ("cap" "cap" "/-\\\n| |") | |
140 ("cup" "cup" "| |\n\\-/") | |
141 ("u+" "uplus" "|+|\n\\-/") | |
142 ("|~|" "sqcap" "|~|") | |
143 ("|_|" "sqcup" "|_|") | |
144 ("v" "vee" "v") | |
145 ("^" "wedge" "^") | |
146 ("\\\\" "setminus" "\\") | |
147 (")(" "wr" " )\n(") | |
148 ("<>" "diamond" "<>") | |
149 ("/\-" "bigtriangleup" ("/\\\n~~" "△")) | |
150 ("-\\/" "bigtriangledown" ("__\n\\/" "▽")) | |
151 ("<|" "triangleleft" "<|") | |
152 ("|>" "triangleright" "|>") | |
153 ("<||" "lhd" "/|\n\\|") | |
154 ("||>" "rhd" "|\\\n|/") | |
155 ("<|-" "unlhd" "<|\n~~") | |
156 ("|>-" "unrhd" "|>\n~~") | |
157 ("o+" "oplus" " _\n(+)\n ~") | |
158 ("o-" "ominus" " _\n(-)\n ~") | |
159 ("ox" "otimes" " _\n(x)\n ~") | |
160 ("o/" "oslash" " _\n(/)\n ~") | |
161 ("o." "odot" "(.)") | |
162 ("O" "bigcirc" "O") | |
13 | 163 ("t" "dagger" ("+\n|" YaTeX-image-dagger)) |
164 ("tt" "ddagger" ("+\n+\n|" YaTeX-image-ddagger)) | |
11 | 165 ("II" "amalg" "II") |
166 ; : | |
167 ;;relational operators | |
168 ("<" "leq" ("<\n-" "≦")) | |
169 (">" "geq" (">\n-" "≧")) | |
13 | 170 ("-=" "equiv" ("=\n-" YaTeX-image-equiv)) |
171 ("=-" "equiv" ("=\n-" YaTeX-image-equiv)) | |
172 ("---" "equiv" ("=\n-" YaTeX-image-equiv)) | |
173 ("(" "subset" (" _\n(\n ~" YaTeX-image-subset)) | |
174 ("(-" "subseteq" (" _\n(_\n ~" YaTeX-image-subseteq)) | |
175 (")" "supset" ("_\n )\n~" YaTeX-image-supset)) | |
176 (")-" "supseteq" ("_\n_)\n~" YaTeX-image-supseteq)) | |
11 | 177 ("[" "sqsubset" "[") |
178 ("[-" "sqsubseteq" "[\n~") | |
179 ("]" "sqsupset" "]") | |
180 ("]-" "sqsupseteq" "]\n~") | |
13 | 181 ("{" "in" ("(-" YaTeX-image-in)) |
182 ("}" "ni" ("-)" YaTeX-image-ni)) | |
11 | 183 ("|-" "vdash" "|-") |
184 ("-|" "dashv" "-|") | |
185 ("~" "sim" "~(tild)") | |
186 ("~-" "simeq" "~\n-") | |
187 ("asymp" "asymp" "v\n^") | |
188 ("~~" "approx" "~\n~") | |
189 ("~=" "cong" "~\n=") | |
190 ("=/" "neq" ("=/=" "≠")) | |
191 (".=" "doteq" ".\n=") | |
192 ("o<" "propto" "o<") | |
193 ("|=" "models" "|=") | |
194 ("_|_" "perp" "_|_") | |
195 ("|" "mid" "|") | |
196 ("||" "parallel" "||") | |
197 ("bowtie" "bowtie" "|><|(wide)") | |
198 ("|><|" "join" "|><|") | |
199 ("\\_/" "smile" "\\_/") | |
200 ("/~\\" "frown" "/~~\\") | |
201 ("-<" "prec" ("-<" "く")) | |
202 ("-<=" "preceq" ("-<\n-" "く\n=")) | |
203 ("<<" "ll" ("<<" "《")) | |
204 ; : | |
205 ;;arrows | |
206 ("<-" "leftarrow" ("<-" "←")) | |
13 | 207 ("\C-b" "leftarrow" ("<-" "←")) |
208 ("<--" "longleftarrow" ("<--" "←--")) | |
11 | 209 ("<=" "Leftarrow" "<=") |
210 ("<==" "Longleftarrow" "<==") | |
211 ("->" "rightarrow" ("->" "→")) | |
13 | 212 ("\C-f" "rightarrow" ("->" "→")) |
11 | 213 ("-->" "longrightarrow" ("-->" "--→")) |
214 ("==>" "Longrightarrow" "==>") | |
215 ("<->" "leftrightarrow" ("<->" "←→")) | |
216 ("<-->" "longleftrightarrow" ("<---->" "←--→")) | |
47 | 217 ("<=>" "Leftrightarrow" "<=>") |
11 | 218 ("<==>" "Longleftrightarrow" "<==>") |
219 ("^|" "uparrow" ("^\n|" "↑")) | |
13 | 220 ("\C-p" "uparrow" ("^\n|" "↑")) |
11 | 221 ("^||" "Uparrow" "/\\\n||") |
222 ("\C-n" "downarrow" ("|\nv" "↓")) | |
13 | 223 ("v|" "downarrow" ("|\nv" "↓")) |
224 ("v||" "Downarrow" "||\n\\/") | |
11 | 225 ("|->" "mapsto" ("|->" "|→")) |
226 ("<-)" "hookleftarrow" (" ,\n<--+" " ヽ\n<--/")) | |
227 ("/-" "leftharpoonup" "/\n~~~") | |
228 ("\\-" "leftharpoondown" "__\n\\") | |
229 ("-/" "rightharpoondown" "__\n/") | |
230 ("-\\" "rightharpoonup" "~~\n\\") | |
231 ;other marks | |
232 ("Z" "aleph" "|\\|") | |
233 ("|\\|" "aleph" "|\\|") | |
234 ("h-" "hbar" "_\nh") | |
235 ("i" "imath" "i") | |
236 ("j" "jmath" "j") | |
237 ("l" "ell" "l") | |
238 ("wp" "wp" "???") | |
239 ("R" "Re" ")R") | |
240 ("Im" "Im" "???") | |
241 ("mho" "mho" "~|_|~") | |
242 ("'" "prime" "'") | |
243 ("0" "emptyset" "0") | |
13 | 244 ("nabla" "nabla" ("___\n\\\\/" YaTeX-image-nabla)) |
11 | 245 ("\\/" "surd" "-\\/") |
246 ("surd" "surd" "-\\/") | |
247 ("top" "top" "T") | |
13 | 248 ("bot" "bot" ("_|_" YaTeX-image-bot)) |
249 ("b" "flat" ("b" YaTeX-image-flat)) | |
11 | 250 ("LT" "natural" "|\nLT\n |") |
13 | 251 ("6" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial)) |
252 ("partial" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial)) | |
253 ("round" "partial" (" -+\n+-+\n+-+" YaTeX-image-partial)) | |
11 | 254 ("[]" "box" "[]") |
255 ("Diamond" "Diamond" "/\\\n\\/") | |
256 ("3" "triangle" "/\\\n~~") | |
257 ("C" "clubsuit" " o\no+o\n |") | |
258 ("D" "diamondsuit" "/\\\n\\/") | |
259 ("H" "heartsuit" "<^^>\n \\/") | |
260 ("S" "spadesuit" " /\\\n<++>\n /\\") | |
261 | |
262 )) | |
263 | |
13 | 264 (defvar YaTeX-math-sign-alist-private nil |
11 | 265 "*User definable key vs LaTeX-math-command alist.") |
266 | |
267 (defvar YaTeX-math-quit-with-strict-match nil | |
268 "*T for quitting completion as soon as strict-match is found.") | |
13 | 269 (setq YaTeX-math-sign-alist |
270 (append YaTeX-math-sign-alist-private YaTeX-math-sign-alist-default)) | |
271 | |
272 ;;(defun YaTeX-math-alist2array (alist array) | |
273 ;; (set array | |
274 ;; (let ((array (make-vector (length alist) "")) (list alist) (i 0)) | |
275 ;; (while list | |
276 ;; (aset array i (car (car list))) | |
277 ;; (setq i (1+ i) list (cdr list))) | |
278 ;; array)) | |
279 ;;) | |
11 | 280 |
13 | 281 (setq YaTeX-greek-key-alist-default |
282 '( | |
283 ("a" "alpha" ("a" "α")) | |
284 ("b" "beta" ("|>\n|>\n|" "β")) | |
285 ("g" "gamma" ("~r" "γ")) | |
286 ("G" "Gamma" ("|~" "Γ")) | |
287 ("d" "delta" ("<~\n<>" "δ")) | |
288 ("D" "Delta" ("/\\\n~~" "Δ")) | |
289 ("e" "epsilon" "<\n<~") | |
290 ("e-" "varepsilon" ("(\n(~" "ε")) | |
291 ("z" "zeta" ("(~\n >" "ζ")) | |
292 ("et" "eta" ("n\n/" "η")) | |
293 ("th" "theta" ("8" "θ")) | |
294 ("Th" "Theta" ("(8)" "Θ")) | |
295 ("th-" "vartheta" ("-8" "-θ")) | |
296 ("i" "iota" ("i\n\\_/" "ι")) | |
297 ("k" "kappa" ("k" "κ")) | |
298 ("l" "lambda" ("\\n/\\" "λ")) | |
299 ("L" "Lambda" ("/\\" "Λ")) | |
300 ("m" "mu" (" u_\n/" "μ")) | |
301 ("n" "nu" ("|/" "ν")) | |
302 ("x" "xi" ("E\n >" "ξ")) | |
303 ("X" "Xi" ("---\n -\n---" "Ξ")) | |
304 ("p" "pi" ("__\n)(" "π")) | |
305 ("P" "Pi" ("__\n||" "Π")) | |
306 ("p-" "varpi" ("_\nw" "__\nω")) | |
307 ("r" "rho" ("/O" "ρ")) | |
308 ("r-" "varrho" ("/O\n~~" "ρ\n~~")) | |
309 ("s" "sigma" ("o~" "σ")) | |
310 ("S" "Sigma" ("\\-+\n >\n/-+" "Σ")) | |
311 ("s-" "varsigma" "(~~ \n>") | |
312 ("t" "tau" ("__\n(" "τ")) | |
313 ("u" "upsilon" ("~v" "υ")) | |
314 ("y" "upsilon" ("~v" "υ")) | |
315 ("U" "Upsilon" ("~Y~" "Υ")) | |
316 ("Y" "Upsilon" ("~Y~" "Υ")) | |
317 ("ph" "phi" (" /\n(/)\n/" "φ")) | |
318 ("Ph" "Phi" (" _\n(|)\n ~" "Φ")) | |
319 ("ph-" "varphi" "\\O\n|") | |
320 ("c" "chi" ("x" "χ")) | |
321 ("ps" "psi" ("\\|/\\n |" "ψ")) | |
322 ("Ps" "Psi" (" ~\n\\|/\\n |" "Ψ")) | |
323 ("o" "omega" ("w" "ω")) | |
324 ("w" "omega" ("w" "ω")) | |
325 ("O" "Omega" ("(~)\n~ ~" "Ω")) | |
326 ("W" "Omega" ("(~)\n~ ~" "Ω")) | |
327 ("f" "foo") | |
328 ) | |
329 ) | |
11 | 330 |
13 | 331 (defvar YaTeX-greek-key-alist-private nil |
332 "*User definable key vs LaTeX-math-command alist.") | |
333 | |
334 (setq YaTeX-greek-key-alist | |
335 (append YaTeX-greek-key-alist-private YaTeX-greek-key-alist-default)) | |
336 | |
337 ;;(mapcar (function (lambda (x) (YaTeX-math-alist2array x))) | |
338 ;; YaTeX-math-key-list) | |
339 | |
11 | 340 (setq YaTeX-math-indicator |
341 "KEY\tLaTeX sequence\t\tsign") | |
342 | |
343 (defvar YaTeX-math-need-image t | |
344 "*T for displaying pseudo image momentarily.") | |
345 (defvar YaTeX-math-max-key 8) | |
346 (defvar YaTeX-math-max-seq | |
347 (* 8 (1+ (/ (length "\\longleftrightarrow") 8)))) | |
348 (defvar YaTeX-math-max-sign 5) | |
349 (defvar YaTeX-math-sign-width | |
350 (+ YaTeX-math-max-key YaTeX-math-max-seq YaTeX-math-max-sign)) | |
351 (defvar YaTeX-math-display-width | |
352 (* 8 (1+ (/ YaTeX-math-sign-width 8)))) | |
353 (defvar YaTeX-math-menu-map nil | |
354 "Keymap used in YaTeX mathematical sign menu mode." | |
355 ) | |
356 (if YaTeX-math-menu-map nil | |
357 (setq YaTeX-math-menu-map (make-sparse-keymap)) | |
358 (define-key YaTeX-math-menu-map "n" 'next-line) | |
359 (define-key YaTeX-math-menu-map "p" 'previous-line) | |
360 (define-key YaTeX-math-menu-map "f" 'YaTeX-math-forward) | |
361 (define-key YaTeX-math-menu-map "b" 'YaTeX-math-backward) | |
362 (define-key YaTeX-math-menu-map "v" 'scroll-up) | |
363 (define-key YaTeX-math-menu-map " " 'scroll-up) | |
364 (define-key YaTeX-math-menu-map "c" 'scroll-up) | |
365 (define-key YaTeX-math-menu-map "V" 'scroll-down) | |
366 (define-key YaTeX-math-menu-map "r" 'scroll-down) | |
367 (define-key YaTeX-math-menu-map "\^h" 'scroll-down) | |
368 (define-key YaTeX-math-menu-map "<" 'beginning-of-buffer) | |
369 (define-key YaTeX-math-menu-map ">" 'end-of-buffer) | |
370 (define-key YaTeX-math-menu-map "\^m" 'exit-recursive-edit) | |
371 (define-key YaTeX-math-menu-map "q" 'abort-recursive-edit)) | |
372 | |
13 | 373 (defvar YaTeX-math-exit-key "\e" |
374 "*Key sequence after prefix key of YaTeX-math-mode to exit from math-mode." | |
375 ) | |
376 | |
11 | 377 (defmacro YaTeX-math-japanese-sign (list) |
378 (list 'nth 1 list)) | |
379 | |
380 (defvar YaTeX-math-cmd-regexp (concat (regexp-quote YaTeX-ec) "[A-z]")) | |
381 | |
13 | 382 ;;; |
383 ;;YaTeX math-mode functions | |
384 ;;; | |
23 | 385 ;;;###autoload from yatex.el |
13 | 386 (defun YaTeX-toggle-math-mode (&optional arg) |
387 (interactive "P") | |
388 (or (memq 'YaTeX-math-mode mode-line-format) nil | |
389 (setq mode-line-format | |
390 (append (list "" 'YaTeX-math-mode) mode-line-format))) | |
23 | 391 (if YaTeX-auto-math-mode nil ;Only effective on manual mode. |
392 (if (or arg (null YaTeX-math-mode)) | |
393 (let (keys) | |
394 (setq YaTeX-math-mode "math:") | |
395 (message "Turn on math mode. Prefix keys are %s" | |
396 (mapconcat 'car YaTeX-math-key-list " ")) | |
397 (sit-for 3) | |
398 (message | |
399 (concat "To exit from math-mode, type `ESC' after prefix, " | |
400 "or type `" | |
401 (key-description | |
402 (car | |
403 (where-is-internal | |
404 'YaTeX-switch-mode-menu YaTeX-mode-map))) | |
405 " $'"))) | |
406 (setq YaTeX-math-mode nil) | |
407 (message "Exit from math mode.")) | |
408 (set-buffer-modified-p (buffer-modified-p))) | |
13 | 409 ) |
410 | |
11 | 411 (defun YaTeX-math-forward (arg) |
412 (interactive "p") | |
413 (re-search-forward YaTeX-math-cmd-regexp nil t arg)) | |
414 | |
415 (defun YaTeX-math-backward (arg) | |
416 (interactive "p") | |
417 (re-search-backward YaTeX-math-cmd-regexp nil t arg)) | |
418 | |
13 | 419 (defun YaTeX-math-gets (sign) |
420 (cond | |
421 ((null sign) nil) | |
422 ((listp sign) | |
423 (setq sign | |
424 (cond | |
425 (YaTeX-japan (YaTeX-math-japanese-sign sign)) | |
426 (t (car sign)))) | |
427 (YaTeX-math-gets sign)) | |
428 ((symbolp sign) | |
429 (YaTeX-math-gets (symbol-value sign))) | |
430 (t sign)) | |
431 ) | |
432 | |
11 | 433 (defun YaTeX-math-get-sign (list) |
13 | 434 (YaTeX-math-gets (car (cdr-safe (cdr-safe list)))) |
11 | 435 ) |
436 | |
23 | 437 (defun YaTeX-in-math-mode-p () |
438 "If current position is supposed to be in LaTeX-math-mode, return t." | |
439 (or (YaTeX-quick-in-environment-p | |
440 '("math" "eqnarray" "equation" "eqnarray*" "displaymath")) | |
441 (let ((p (point)) (nest 0) me0 | |
442 (boundary | |
443 (save-excursion | |
444 (if (looking-at YaTeX-paragraph-delimiter) | |
445 (goto-char (max (point-min) (1- (point))))) | |
446 (re-search-backward YaTeX-paragraph-delimiter nil 1) | |
447 (point)))) | |
448 (save-excursion | |
449 (cond | |
450 ((catch 'open | |
451 (save-excursion | |
452 (while (and (>= nest 0) | |
453 (re-search-backward | |
454 (concat YaTeX-ec-regexp ;\ | |
455 "\\([()]\\|[][]\\)") boundary t)) | |
456 (setq me0 (match-end 0)) | |
457 (if (or (YaTeX-on-comment-p) | |
458 (YaTeX-quick-in-environment-p "verbatim")) nil | |
459 (if (or (= (char-after (1- me0)) ?\)) | |
460 (= (char-after (1- me0)) ?\])) | |
461 (setq nest (1+ nest)) | |
37
433b27a11019
Do not count \\[5pt] as the beginning of \[ (YaTeX-in-math-mode-p).
yuuji
parents:
23
diff
changeset
|
462 (if (= (preceding-char) ?\\ ) nil;;\\[5pt] |
433b27a11019
Do not count \\[5pt] as the beginning of \[ (YaTeX-in-math-mode-p).
yuuji
parents:
23
diff
changeset
|
463 (setq nest (1- nest)))))) |
23 | 464 (if (< nest 0) (throw 'open t)))) |
465 t) | |
466 (t (catch 'dollar | |
467 (while (search-backward "$" boundary t) | |
468 (cond | |
469 ((equal (char-after (1- (point))) ?$) ; $$ equation $$ | |
470 (backward-char 1) | |
471 (setq nest (1+ nest))) | |
472 ((and (equal (char-after (1- (point))) ?\\ ) | |
473 (not (equal (char-after (- (point) 3)) ?\\ ))) | |
474 nil) ;\$ | |
475 (t (setq nest (1+ nest))))) | |
476 (if (= (% nest 2) 1) (throw 'dollar t)))))))) | |
477 ) | |
478 | |
11 | 479 (defun YaTeX-math-display-list (list cols) |
480 (goto-char (point-max)) | |
481 (if (= cols 0) (if (not (eolp)) (newline 1)) | |
482 (forward-line -1) | |
483 (while (looking-at "[ \t\n]") (forward-line -1))) | |
484 (end-of-line) | |
485 (let ((indent (* YaTeX-math-display-width cols)) sign str to) | |
486 (indent-to indent) | |
487 (insert (car list)) | |
488 (indent-to (setq indent (+ indent YaTeX-math-max-key))) | |
489 (insert "\\" (car (cdr list))) | |
490 (setq indent (+ indent YaTeX-math-max-seq)) | |
491 (setq sign (YaTeX-math-get-sign list)) | |
13 | 492 (while (and sign (not (string= "" sign))) |
11 | 493 (setq to (string-match "\n" sign) |
494 str (if to (substring sign 0 to) sign)) | |
495 (end-of-line) | |
496 (indent-to indent) | |
497 (insert str) | |
498 (cond ((eobp) (newline 1)) | |
499 ((> cols 0) (forward-line 1))) | |
500 (setq sign (if to (substring sign (1+ to)) ""))))) | |
501 | |
502 (defvar YaTeX-math-menu-buffer "*math-mode-signs*") | |
503 | |
504 (defun YaTeX-math-show-menu (match-str) | |
505 (save-window-excursion | |
506 (pop-to-buffer YaTeX-math-menu-buffer) | |
507 (let ((maxcols (max 1 (/ (screen-width) YaTeX-math-sign-width))) | |
508 (case-fold-search nil) | |
13 | 509 (cols 0) (list alist) command) |
11 | 510 (erase-buffer) |
13 | 511 (insert |
512 "Candidates of sign. [n:next p:prev f:forw b:back q:quit RET:select]\n") | |
11 | 513 (insert YaTeX-math-indicator "\t") |
514 (insert YaTeX-math-indicator) | |
515 (newline 1) | |
516 (insert-char ?- (1- (screen-width))) | |
517 (newline 1) | |
518 (while list | |
519 (if (string-match match-str (car (car list))) | |
520 (progn (YaTeX-math-display-list (car list) cols) | |
521 (setq cols (% (1+ cols) maxcols)))) | |
522 (setq list (cdr list))) | |
13 | 523 (goto-line 4) |
11 | 524 (use-local-map YaTeX-math-menu-map) |
525 (unwind-protect | |
526 (recursive-edit) | |
527 (skip-chars-backward "^ \t\n") | |
528 (setq command | |
529 (if (re-search-forward YaTeX-math-cmd-regexp nil t) | |
530 (buffer-substring | |
531 (match-beginning 0) | |
532 (prog2 (skip-chars-forward "^ \t\n") (point))) | |
533 nil)) | |
534 (kill-buffer YaTeX-math-menu-buffer)) | |
535 command)) | |
536 ) | |
537 | |
538 ; | |
539 (defun YaTeX-math-show-image (image &optional exit-char) | |
540 "Momentarily display IMAGE at the beginning of the next line; | |
541 erase it on the next keystroke. The window is recentered if necessary | |
542 to make the whole string visible. If the window isn't large enough, | |
543 at least you get to read the beginning." | |
13 | 544 (if (and image (not (string= image ""))) |
545 (let ((buffer-read-only nil) | |
546 (modified (buffer-modified-p)) | |
547 (name buffer-file-name) | |
548 insert-start | |
549 insert-end) | |
550 (unwind-protect | |
551 (progn | |
552 (save-excursion | |
553 ;; defeat file locking... don't try this at home, kids! | |
554 (setq buffer-file-name nil) | |
555 (forward-line 1) | |
556 (setq insert-start (point)) | |
557 (if (eobp) (newline)) | |
558 (insert image) | |
559 (setq insert-end (point))) | |
560 ; make sure the whole string is visible | |
561 (if (not (pos-visible-in-window-p insert-end)) | |
562 (recenter (max 0 | |
563 (- (window-height) | |
564 (count-lines insert-start insert-end) | |
565 2)))) | |
566 (let ((char (read-char))) | |
567 (or (eq char exit-char) | |
568 (setq unread-command-char char)))) | |
569 (if insert-end | |
570 (save-excursion | |
571 (delete-region insert-start insert-end))) | |
572 (setq buffer-file-name name) | |
573 (set-buffer-modified-p modified))))) | |
11 | 574 |
23 | 575 (defun YaTeX-math-insert-sequence (&optional force) |
576 "Insert math-mode sequence with image completion." | |
577 (interactive "P") | |
13 | 578 (let*((key "") regkey str last-char list i |
579 (case-fold-search nil) match sign | |
580 (this-key (char-to-string last-command-char)) | |
581 (alist (symbol-value (cdr (assoc this-key YaTeX-math-key-list)))) | |
582 (n (length alist)) (beg (point)) result) | |
11 | 583 (setq result |
584 (catch 'complete | |
23 | 585 (if (and (not force) |
586 (or (and (not YaTeX-auto-math-mode) (not YaTeX-math-mode)) | |
587 (not (YaTeX-in-math-mode-p)))) | |
588 (throw 'complete 'escape));this tag should be exit, but... | |
11 | 589 (while t |
23 | 590 (message "Sequence(TAB for menu): %s" key) |
11 | 591 (setq last-char (read-char) |
592 key (concat key (char-to-string last-char)) | |
13 | 593 i 0) |
11 | 594 (cond |
13 | 595 ((string= key this-key) ;;invoke key itself |
11 | 596 (throw 'complete 'escape)) |
13 | 597 ((string= key YaTeX-math-exit-key) ;;exit from math-mode |
598 (throw 'complete 'exit)) | |
23 | 599 ((string-match "\r" key) ;;RET = kakutei |
600 (throw 'complete 'select)) | |
601 ((string-match "[\C-g\C-c]" key) ;;C-g = abort | |
602 (throw 'complete 'abort)) | |
603 ((string-match "[\t\n]" key) ;;TAB, LFD = menu | |
604 (throw 'complete 'menu)) | |
605 ((string-match "[\C-h\C-?]" key) ;;BS, DEL = BS | |
606 (if (< (length key) 2) (throw 'complete 'abort)) | |
13 | 607 (setq key (substring key 0 -2)))) |
608 | |
609 (setq regkey (concat "^" (regexp-quote key))) | |
23 | 610 (message "Sequence(TAB for menu): %s" key) |
11 | 611 (if |
612 (catch 'found | |
613 ;;(1)input string strictly matches with alist | |
23 | 614 (setq match (assoc key alist)) |
615 ;;remember previous match | |
616 | |
11 | 617 ;;(2)search partial match into alist |
13 | 618 (setq list alist) |
11 | 619 (while (< i n) |
620 (if (string-match | |
13 | 621 regkey |
622 ;;(aref array i) | |
623 ;;(car (nth i alist)) | |
23 | 624 (car (car list))) |
11 | 625 (progn |
626 (or match | |
13 | 627 ;;(setq match (nth i alist)) |
628 (setq match (car list))) | |
11 | 629 (throw 'found t))) |
13 | 630 (setq i (1+ i) list (cdr list)))) ;catch 'found |
11 | 631 nil ;;if any match, continue reading |
632 ;;else reading of sequence has been done. | |
633 (message "complete.") | |
23 | 634 (throw 'complete t)) |
635 | |
11 | 636 (if match |
637 (progn (delete-region beg (point)) | |
23 | 638 (setq single-command (car (cdr match))) |
639 (insert YaTeX-ec single-command) | |
13 | 640 (if (and YaTeX-math-need-image |
641 (setq sign (YaTeX-math-get-sign match))) | |
642 (YaTeX-math-show-image (concat sign "\n"))) | |
11 | 643 ) |
644 nil) | |
645 ))) | |
646 (cond | |
647 ((eq result t) | |
648 (setq YaTeX-current-completion-type 'maketitle) | |
23 | 649 |
13 | 650 ;;;(sit-for 1) |
11 | 651 (setq unread-command-char last-char) |
652 (insert (YaTeX-addin single-command))) | |
653 ((eq result 'abort) | |
654 (delete-region beg (point)) | |
655 (message "Abort.")) | |
656 ((eq result 'escape) | |
657 (delete-region beg (point)) | |
13 | 658 (insert this-key)) |
23 | 659 ((eq result 'select) |
660 (message "Done.")) | |
13 | 661 ((eq result 'exit) |
662 (delete-region beg (point)) | |
663 (YaTeX-toggle-math-mode)) | |
11 | 664 ((eq result 'menu) |
665 (delete-region beg (point)) | |
666 (setq key (concat "^" (regexp-quote (substring key 0 -1)))) | |
667 (insert (YaTeX-math-show-menu key))))) | |
668 ) | |
669 ;; | |
670 (provide 'yatexmth) | |
13 | 671 |
672 ; Local variables: | |
673 ; fill-prefix: ";;; " | |
674 ; paragraph-start: "^$\\|\\|;;;$" | |
675 ; paragraph-separate: "^$\\|\\|;;;$" | |
676 ; End: |