yatex

annotate yatex19.el @ 69:807c1e7e68b7

yahtml-escape-chars-region Translate <>"& to entity reference. And inverse translation to above. yahtml-translate-hyphens-when-comment-region yahtml-prefer-upcase-attributes Inquire .htaccess file to determine the file-coding-system. Completions for StyleSheet. ---yahtml--- Auto insert of \), \|, \] after corresponding \(, \| \]. [prefix] c for \right\left parens.
author yuuji
date Thu, 15 Jul 1999 04:58:26 +0000
parents 0eb6997bee16
children 44e3a5e1e883
rev   line source
yuuji@46 1 ;;; -*- Emacs-Lisp -*-
yuuji@46 2 ;;; YaTeX facilities for Emacs 19
yuuji@69 3 ;;; (c )1994-1999 by HIROSE Yuuji.[yuuji@gentei.org]
yuuji@69 4 ;;; Last modified Thu Apr 29 18:40:26 1999 on firestorm
yuuji@46 5 ;;; $Id$
yuuji@46 6
yuuji@49 7 ;;; とりあえず hilit19 を使っている時に色が付くようにして
yuuji@49 8 ;;; メニューバーでごにょごにょできるようにしただけ。
yuuji@49 9 ;;; いったい誰がメニューバー使ってLaTeXソース書くんだろうか?
yuuji@49 10 ;;; まあいいや練習練習。後ろの方にちょっとコメントあり。
yuuji@53 11 ;;; 真中辺にあるけど、hilit19.el 対応の方は結構本気。
yuuji@64 12 ;;; とかいってるうちに hilit19 って obsolete になってしまった…
yuuji@46 13
yuuji@64 14 ;(require 'yatex)
yuuji@47 15
yuuji@64 16 (defvar YaTeX-mode-menu-map (make-sparse-keymap "YaTeX"))
yuuji@64 17 (defvar YaTeX-mode-menu-map-process (make-sparse-keymap "Process"))
yuuji@64 18 (define-key YaTeX-mode-map [menu-bar yatex]
yuuji@64 19 (cons "YaTeX" YaTeX-mode-menu-map))
yuuji@64 20 (YaTeX-define-menu
yuuji@64 21 'YaTeX-mode-menu-map-process
yuuji@64 22 (nreverse
yuuji@64 23 '((buffer "LaTeX" . (lambda () (interactive) (YaTeX-typeset-menu nil ?j)))
yuuji@64 24 (kill "Kill LaTeX" . (lambda () (interactive) (YaTeX-typeset-menu nil ?k)))
yuuji@64 25 (bibtex "BibTeX" . (lambda () (interactive) (YaTeX-typeset-menu nil ?b)))
yuuji@64 26 (mindex "makeindex" . (lambda () (interactive) (YaTeX-typeset-menu nil ?i)))
yuuji@64 27 (preview "Preview" . (lambda () (interactive) (YaTeX-typeset-menu nil ?p)))
yuuji@64 28 (lpr "lpr" . (lambda () (interactive) (YaTeX-typeset-menu nil ?l)))
yuuji@64 29 (lpq "lpq" . (lambda () (interactive) (YaTeX-typeset-menu nil ?q))))))
yuuji@64 30 (defvar YaTeX-mode-menu-map-modes (make-sparse-keymap "Modes"))
yuuji@64 31 (YaTeX-define-menu
yuuji@64 32 'YaTeX-mode-menu-map-modes
yuuji@64 33 (delq nil
yuuji@64 34 (nreverse
yuuji@64 35 (list
yuuji@64 36 (if YaTeX-auto-math-mode nil
yuuji@64 37 (cons 'math (cons "Toggle math-mode"
yuuji@64 38 '(lambda () (interactive)
yuuji@64 39 (YaTeX-switch-mode-menu nil ?t)))))
yuuji@64 40 (cons 'mod (cons "Toggle Modify Mode"
yuuji@64 41 '(lambda () (interactive)
yuuji@64 42 (YaTeX-switch-mode-menu nil ?m))))))))
yuuji@64 43 (defvar YaTeX-mode-menu-map-percent (make-sparse-keymap "percent"))
yuuji@64 44 (YaTeX-define-menu
yuuji@64 45 'YaTeX-mode-menu-map-percent
yuuji@64 46 (nreverse
yuuji@64 47 '((! "Change LaTeX typesetter(%#!)"
yuuji@64 48 . (lambda () (interactive) (YaTeX-%-menu nil nil ?!)))
yuuji@64 49 (begend "Set %#BEGIN-%#END on region"
yuuji@64 50 . (lambda () (interactive) (YaTeX-%-menu nil nil ?b)))
yuuji@64 51 (lpr "Change LPR format"
yuuji@64 52 . (lambda () (interactive) (YaTeX-%-menu nil nil ?l))))))
yuuji@46 53
yuuji@64 54 (defvar YaTeX-mode-menu-map-jump (make-sparse-keymap "jump"))
yuuji@64 55 (YaTeX-define-menu
yuuji@64 56 'YaTeX-mode-menu-map-jump
yuuji@64 57 (nreverse
yuuji@64 58 '((corres "Goto corersponding position" . YaTeX-goto-corresponding-*)
yuuji@64 59 (main "Visit main source"
yuuji@64 60 . (lambda () (interactive) (YaTeX-visit-main)))
yuuji@64 61 (main-other "Visit main source other window"
yuuji@64 62 . YaTeX-visit-main-other-window))))
yuuji@46 63
yuuji@64 64 (defvar YaTeX-mode-menu-map-comment (make-sparse-keymap "comment"))
yuuji@64 65 (YaTeX-define-menu
yuuji@64 66 'YaTeX-mode-menu-map-comment
yuuji@64 67 (nreverse
yuuji@64 68 '((comment "Comment region or environment" . YaTeX-comment-region)
yuuji@64 69 (uncomment "Unomment region or environment" . YaTeX-uncomment-region)
yuuji@64 70 (commentp "Comment paragraph" . YaTeX-comment-paragraph)
yuuji@64 71 (uncommentp "Uncomment paragraph" . YaTeX-uncomment-paragraph))))
yuuji@46 72
yuuji@64 73 (YaTeX-define-menu
yuuji@64 74 'YaTeX-mode-menu-map
yuuji@64 75 (nreverse
yuuji@64 76 (list
yuuji@64 77 ;; Change/Kill/Fill -------------------------------------------------------
yuuji@64 78 (cons (list 'chg "Change") (cons "Change macros" 'YaTeX-change-*))
yuuji@64 79 (cons (list 'kill "Kill") (cons "Kill macros" 'YaTeX-kill-*))
yuuji@64 80 (cons (list 'fill "Fill") (cons "Fill \\item" 'YaTeX-fill-item))
yuuji@64 81 (cons (list 'nl "Newline") (cons "Newline" 'YaTeX-intelligent-newline))
yuuji@64 82 ;; ========================================================================
yuuji@64 83 (cons (list 'sep1 "---") (cons "---" nil))
yuuji@64 84 ;; Comment/Uncomment ------------------------------------------------------
yuuji@64 85 (cons (list 'comment "comment") (cons "Comment region or environment"
yuuji@64 86 'YaTeX-comment-region))
yuuji@64 87 (cons (list 'uncomment "uncomment") (cons "Uncomment region or environment"
yuuji@64 88 'YaTeX-uncomment-region))
yuuji@64 89 (cons (list 'commentp "commentp") (cons "Comment paragraph"
yuuji@64 90 'YaTeX-comment-paragraph))
yuuji@64 91 (cons (list 'uncommentp "uncommentp") (cons "Uncomment paragraph"
yuuji@64 92 'YaTeX-uncomment-paragraph))
yuuji@64 93 ;; ========================================================================
yuuji@64 94 (cons (list 'sep2 "---") (cons "---" nil))
yuuji@64 95 ;; Jump cursor ------------------------------------------------------------
yuuji@64 96 (cons (list 'jump "jump") (cons "Jump Cursor" YaTeX-mode-menu-map-jump))
yuuji@64 97 ;; Document hierarchy ---------------------------------------------------
yuuji@64 98 (cons (list 'hier "hier") (cons "Display Document hierarchy"
yuuji@64 99 'YaTeX-display-hierarchy))
yuuji@64 100 ;; What position ----------------------------------------------------------
yuuji@64 101 (cons (list 'col "column") (cons "What column in tabular"
yuuji@64 102 'YaTeX-what-column))
yuuji@64 103 ;; % menu -----------------------------------------------------------------
yuuji@64 104 (cons (list 'percent "percent") (cons "Edit %# notation"
yuuji@64 105 YaTeX-mode-menu-map-percent))
yuuji@64 106 ;; Switch modes -----------------------------------------------------------
yuuji@64 107 (cons (list 'mode "mode") (cons "Switching YaTeX's modes"
yuuji@64 108 YaTeX-mode-menu-map-modes))
yuuji@64 109 ;; ========================================================================
yuuji@64 110 (cons (list 'sep "---") (cons "---" nil))
yuuji@64 111 ;; Help for LaTeX ---------------------------------------------------------
yuuji@64 112 (cons (list 'ap "apr") (cons "Apropos on LaTeX commands" 'YaTeX-apropos))
yuuji@64 113 (cons (list 'help "help") (cons "Help on LaTeX commands" 'YaTeX-help))
yuuji@64 114 ;; Menu for Typeset relating processes ------------------------------------
yuuji@64 115 (cons (list 'process "Process menu")
yuuji@64 116 (cons "Process" YaTeX-mode-menu-map-process)))
yuuji@64 117 ))
yuuji@46 118
yuuji@64 119 ;; Make section-type commands menu -------------------------------------------
yuuji@64 120 (defvar YaTeX-mode-menu-map-sectionr
yuuji@64 121 (make-sparse-keymap "Enclose region with section-type macro"))
yuuji@64 122 (defvar YaTeX-mode-menu-map-section (make-sparse-keymap "Section-type macro"))
yuuji@46 123 (let ((sorted-section
yuuji@46 124 (sort
yuuji@46 125 (delq nil
yuuji@46 126 (mapcar (function (lambda (s)
yuuji@46 127 (if (> (length (car s)) 5)
yuuji@46 128 (car s))))
yuuji@46 129 (append section-table user-section-table)))
yuuji@46 130 'string<)))
yuuji@64 131 (YaTeX-define-menu
yuuji@64 132 'YaTeX-mode-menu-map-section
yuuji@64 133 (mapcar
yuuji@64 134 (function (lambda (secname)
yuuji@64 135 (cons (intern secname)
yuuji@64 136 (cons secname
yuuji@64 137 (list 'lambda ()
yuuji@64 138 (list 'interactive)
yuuji@64 139 (list 'YaTeX-make-section
yuuji@64 140 nil nil nil
yuuji@64 141 secname))))))
yuuji@64 142 sorted-section))
yuuji@64 143 (YaTeX-define-menu
yuuji@64 144 'YaTeX-mode-menu-map-sectionr
yuuji@64 145 (mapcar
yuuji@64 146 (function (lambda (secname)
yuuji@64 147 (cons (intern secname)
yuuji@64 148 (cons secname
yuuji@64 149 (list 'lambda ()
yuuji@64 150 (list 'interactive)
yuuji@64 151 (list 'YaTeX-make-section
yuuji@64 152 nil
yuuji@64 153 (list 'region-beginning)
yuuji@64 154 (list 'region-end)
yuuji@64 155 secname))))))
yuuji@64 156 sorted-section)))
yuuji@46 157
yuuji@64 158 (YaTeX-define-menu
yuuji@64 159 'YaTeX-mode-menu-map
yuuji@64 160 (nreverse
yuuji@64 161 (list
yuuji@64 162 (cons '(sectionr "Section-type (long name)")
yuuji@64 163 (cons "Section type" YaTeX-mode-menu-map-section))
yuuji@64 164 (cons '(section "Section-type region (long name)")
yuuji@64 165 (cons "Section type region (long name)"
yuuji@64 166 YaTeX-mode-menu-map-sectionr)))))
yuuji@64 167
yuuji@64 168 ;; Make large-type commands menu ---------------------------------------------
yuuji@64 169 (defvar YaTeX-mode-menu-map-envr (make-sparse-keymap "Environment region"))
yuuji@64 170 (defvar YaTeX-mode-menu-map-env (make-sparse-keymap "Environment"))
yuuji@64 171
yuuji@64 172 (let ((sorted-env
yuuji@64 173 (sort
yuuji@64 174 (mapcar (function (lambda (s) (car s)))
yuuji@64 175 (append env-table user-env-table))
yuuji@64 176 'string<)))
yuuji@64 177 (YaTeX-define-menu
yuuji@64 178 'YaTeX-mode-menu-map-env
yuuji@64 179 (mapcar
yuuji@64 180 (function (lambda (envname)
yuuji@64 181 (cons (intern envname)
yuuji@64 182 (cons envname
yuuji@64 183 (list 'lambda ()
yuuji@64 184 (list 'interactive)
yuuji@64 185 (list 'YaTeX-insert-begin-end
yuuji@64 186 envname nil))))))
yuuji@64 187 sorted-env))
yuuji@64 188 (YaTeX-define-menu
yuuji@64 189 'YaTeX-mode-menu-map-envr
yuuji@64 190 (mapcar
yuuji@64 191 (function (lambda (envname)
yuuji@64 192 (cons (intern envname)
yuuji@64 193 (cons envname
yuuji@64 194 (list 'lambda ()
yuuji@64 195 (list 'interactive)
yuuji@64 196 (list 'YaTeX-insert-begin-end
yuuji@64 197 envname t))))))
yuuji@64 198 sorted-env)))
yuuji@64 199 (YaTeX-define-menu
yuuji@64 200 'YaTeX-mode-menu-map
yuuji@64 201 (nreverse
yuuji@64 202 (list
yuuji@64 203 (cons '(envr "Environment")
yuuji@64 204 (cons "Environment" YaTeX-mode-menu-map-env))
yuuji@64 205 (cons '(env "Environment region")
yuuji@64 206 (cons "Environment region"
yuuji@64 207 YaTeX-mode-menu-map-envr)))))
yuuji@64 208
yuuji@64 209 (and (featurep 'xemacs)
yuuji@64 210 (add-hook 'yatex-mode-hook
yuuji@64 211 '(lambda ()
yuuji@64 212 (or (assoc "YaTeX" current-menubar)
yuuji@64 213 (progn
yuuji@64 214 (set-buffer-menubar (copy-sequence current-menubar))
yuuji@64 215 (add-submenu nil YaTeX-mode-menu-map))))))
yuuji@46 216
yuuji@53 217 ;; Other key bindings for window-system
yuuji@53 218 ;(YaTeX-define-key [?\C- ] 'YaTeX-do-completion)
yuuji@53 219 (define-key YaTeX-mode-map [?\M-\C- ] 'YaTeX-mark-environment)
yuuji@53 220
yuuji@46 221 ;; Highlightening
yuuji@53 222 ;; メニューに比べてこっちは結構本気でやってます。
yuuji@53 223 ;; だって文書構造がとっても分かり易いんだもん。
yuuji@53 224 ;; みんなも hilit19.el を使おう!
yuuji@53 225 ;;
yuuji@53 226 ;; さて、まずは対応する {} をピカピカ範囲とするような関数を作る。
yuuji@53 227 ;; これは hilit-LaTeX.el を参考にした。でも、ちゃんと section 型コマンドの
yuuji@53 228 ;; 引数を数えて正しい位置までピカピカさせるよ〜ん!
yuuji@53 229
yuuji@53 230 (defun YaTeX-19-region-section-type (pattern)
yuuji@53 231 "Return list of starting and end point of section-type commands of PATTERN."
yuuji@53 232 (if (re-search-forward pattern nil t)
yuuji@69 233 (let ((m0 (match-beginning 0)) (e0 (match-end 0)) cmd (argc 1))
yuuji@64 234 (setq cmd (substring (YaTeX-match-string 0) 1)
yuuji@53 235 argc (or (car (cdr (YaTeX-lookup-table cmd 'section))) argc))
yuuji@69 236 (if (= argc 0) (cons m0 (point)) ;引数個数0ならマッチした領域
yuuji@69 237 (skip-chars-forward " \n\t*")
yuuji@69 238 (while (looking-at "\\[") (forward-list 1)) ;optionならスキップ
yuuji@69 239 (skip-chars-forward " \n\t")
yuuji@69 240 (if (looking-at "{") ;{}が始まるならちゃんとしたsection型
yuuji@69 241 (cons m0
yuuji@69 242 (progn ;(skip-chars-backward "^{") (forward-char -2)
yuuji@69 243 (while (> argc 0)
yuuji@69 244 (skip-chars-forward "^{")
yuuji@69 245 (forward-list 1)
yuuji@69 246 (setq argc (1- argc)))
yuuji@69 247 (point)))
yuuji@69 248 ;{}でないならたぶん \verb 環境などにあるダミー
yuuji@69 249 (cons m0 e0))))))
yuuji@53 250
yuuji@53 251 (defun YaTeX-19-region-large-type (pattern)
yuuji@53 252 "Return list of large-type contents.
yuuji@53 253 Assumes PATTERN begins with `{'."
yuuji@53 254 (if (re-search-forward pattern nil t)
yuuji@53 255 (let ((m0 (match-beginning 0)))
yuuji@53 256 (goto-char m0)
yuuji@53 257 (skip-chars-forward "^ \t\n")
yuuji@53 258 (skip-chars-forward " \t\n")
yuuji@53 259 (cons (point)
yuuji@53 260 (progn (goto-char m0) (forward-list 1)
yuuji@53 261 (1- (point)))))))
yuuji@53 262
yuuji@53 263 ;; 些細なことだが % の前の文字もピカリとさせてしまうようで… >hilit19
yuuji@53 264 ;; ↓この関数は下の hilit-set-mode-patterns の "[^\\]\\(%\\).*$" に
yuuji@53 265 ;; 依存している
yuuji@53 266 (defun YaTeX-19-region-comment (pattern)
yuuji@53 267 "Return list of comment start and end point."
yuuji@53 268 (if (re-search-forward pattern nil t)
yuuji@56 269 (cons (match-beginning 2) (match-end 0))))
yuuji@56 270
yuuji@56 271 ;;(make-face 'tt)
yuuji@56 272 ;;(set-face-font 'tt "-schumacher-clean-medium-r-normal--*-*-*-*-*-*-*-*")
yuuji@56 273 ;;(hilit-translate 'tt "white")
yuuji@53 274
yuuji@53 275 (defvar YaTeX-hilit-patterns-alist
yuuji@53 276 '(
yuuji@53 277 ;; comments
yuuji@56 278 (YaTeX-19-region-comment "\\([^\\]\\|^\\)\\(%\\).*$" comment)
yuuji@58 279
yuuji@64 280 (YaTeX-19-region-section-type "\\\\footnote\\(mark\\|text\\)?\\>" keyword)
yuuji@53 281 ("\\\\[a-z]+box" 0 keyword)
yuuji@64 282 (YaTeX-19-region-section-type "\\\\\\(v\\|h\\)space\\>" keyword)
yuuji@58 283
yuuji@53 284 ;; (re-)define new commands/environments/counters
yuuji@53 285 (YaTeX-19-region-section-type
yuuji@64 286 "\\\\\\(re\\)?new\\(environment\\|command\\|theorem\\|length\\|counter\\)\\>"
yuuji@60 287 defun)
yuuji@53 288 (YaTeX-19-region-section-type
yuuji@64 289 "\\\\textbf\\>" bold)
yuuji@53 290
yuuji@53 291 ;; various declarations/definitions
yuuji@53 292 (YaTeX-19-region-section-type
yuuji@64 293 "\\\\\\(set\\|setto\\|addto\\)\\(length\\|width\\|counter\\)\\>"
yuuji@53 294 define)
yuuji@53 295 (YaTeX-19-region-section-type
yuuji@64 296 "\\\\\\(title\\|author\\|date\\|thanks\\)\\>" define)
yuuji@53 297
yuuji@59 298 ("\\\\document\\(style\\|class\\)\\(\\[.*\\]\\)?{" "}" decl)
yuuji@53 299 ("\\\\\\(begin\\|end\\|nofiles\\|includeonly\\){" "}" decl)
yuuji@53 300 ("\\\\\\(raggedright\\|makeindex\\|makeglossary\\|maketitle\\)\\b" 0 decl)
yuuji@53 301 ("\\\\\\(pagestyle\\|thispagestyle\\|pagenumbering\\){" "}" decl)
yuuji@53 302 ("\\\\\\(normalsize\\|small\\|footnotesize\\|scriptsize\\|tiny\\|large\\|Large\\|LARGE\\|huge\\|Huge\\)\\b" 0 decl)
yuuji@53 303 ("\\\\\\(appendix\\|tableofcontents\\|listoffigures\\|listoftables\\)\\b"
yuuji@53 304 0 decl)
yuuji@53 305 ("\\\\\\(bf\\|em\\|it\\|rm\\|sf\\|sl\\|ss\\|tt\\)\\b" 0 decl)
yuuji@53 306
yuuji@53 307 ;; label-like things
yuuji@53 308 ;;this should be customized by YaTeX-item-regexp
yuuji@53 309 ("\\\\\\(sub\\)*item\\b\\(\\[[^]]*\\]\\)?" 0 label)
yuuji@53 310 (YaTeX-19-region-section-type
yuuji@64 311 "\\\\caption\\(\\[[^]]*\\]\\)?\\>" label)
yuuji@53 312
yuuji@61 313 ;; things that do some sort of cross-reference
yuuji@61 314 (YaTeX-19-region-section-type
yuuji@64 315 "\\\\\\(\\(no\\)?cite\\|\\(page\\)?ref\\|label\\|index\\|glossary\\)\\>"
yuuji@61 316 crossref)
yuuji@61 317
yuuji@61 318 ;; things that bring in external files
yuuji@61 319 ("\\\\\\(include\\|input\\|bibliography\\){" "}" include)
yuuji@61 320
yuuji@53 321 ;; formulas
yuuji@53 322 ("[^\\]\\\\(" "\\\\)" formula) ; \( \)
yuuji@53 323 ("[^\\]\\\\\\[" "\\\\\\]" formula) ; \[ \]
yuuji@68 324 ("\\\\begin{\\(eqn\\|equation\\|x?x?align\\|split\\|multline\\|gather\\)"
yuuji@68 325 "\\\\end{\\(eqn\\|equation\\|x?x?align\\|split\\|multline\\|gather\\).*}"
yuuji@58 326 formula)
yuuji@58 327 ("[^\\$]\\($\\($[^$]*\\$\\|[^$]*\\)\\$\\)" 1 formula); '$...$' or '$$...$$'
yuuji@53 328
yuuji@61 329 ;; "wysiwyg" emphasis -- these don't work on nested expressions
yuuji@56 330 (YaTeX-19-region-large-type "{\\\\\\(em\\|it\\|sl\\)" italic)
yuuji@53 331 (YaTeX-19-region-large-type "{\\\\bf" bold)
yuuji@56 332 ;;;(YaTeX-19-region-large-type "{\\\\tt" tt)
yuuji@56 333 ;;;("\\\\begin{verbatim" "\\\\end{verbatim" tt)
yuuji@53 334
yuuji@61 335 ("``" "''" string))
yuuji@58 336 "*Hiliting pattern alist for LaTeX text.")
yuuji@53 337
yuuji@53 338 ;;(defvar YaTeX-hilit-pattern-adjustment-default nil)
yuuji@53 339 ;; ↑いらなくなった。
yuuji@51 340 (defvar YaTeX-hilit-pattern-adjustment-private nil
yuuji@53 341 "*Adjustment hilit-pattern-alist for default yatex-mode's pattern.")
yuuji@46 342 (defvar YaTeX-hilit-sectioning-face
yuuji@57 343 '(yellow/dodgerblue yellow/slateblue)
yuuji@51 344 "*Hilightening face for sectioning unit. '(FaceForLight FaceForDark)")
yuuji@57 345 (defvar YaTeX-hilit-sectioning-attenuation-rate
yuuji@57 346 '(15 40)
yuuji@57 347 "*Maximum attenuation rate of sectioning face. '(ForeRate BackRate)
yuuji@57 348 Each rate specifies how much portion of RGB value should be attenuated
yuuji@57 349 towards to lowest sectioning unit. Numbers should be written in percentage.")
yuuji@52 350 (defvar YaTeX-sectioning-patterns-alist nil
yuuji@52 351 "Hilightening patterns for sectioning units.")
yuuji@47 352 (defvar YaTeX-hilit-singlecmd-face
yuuji@51 353 '(slateblue2 aquamarine)
yuuji@51 354 "*Hilightening face for maketitle type. '(FaceForLight FaceForDark)")
yuuji@52 355
yuuji@52 356 ;;; セクションコマンドを、構造レベルの高さに応じて色の濃度を変える
yuuji@52 357 ;;; 背景が黒でないと何が嬉しいのか分からないに違いない.
yuuji@53 358 ;;; もしかして白地の時は構造レベルに応じて色を明るくしたほうが良いのか?
yuuji@60 359 ;(if (fboundp 'win32-color-values)
yuuji@60 360 ; (fset 'x-color-values 'win32-color-values))
yuuji@60 361
yuuji@53 362 (cond
yuuji@53 363 ((and (featurep 'hilit19) (fboundp 'x-color-values))
yuuji@53 364 (let*((sectface
yuuji@53 365 (car (if (eq hilit-background-mode 'dark)
yuuji@53 366 (cdr YaTeX-hilit-sectioning-face)
yuuji@53 367 YaTeX-hilit-sectioning-face)))
yuuji@53 368 (sectcol (symbol-name sectface))
yuuji@53 369 sect-pat-alist)
yuuji@53 370 (if (string-match "/" sectcol)
yuuji@57 371 (let ((fmin (nth 0 YaTeX-hilit-sectioning-attenuation-rate))
yuuji@57 372 (bmin (nth 1 YaTeX-hilit-sectioning-attenuation-rate))
yuuji@57 373 colorvalue fR fG fB bR bG bB pat fg bg level from face list lm)
yuuji@53 374 (require 'yatexsec)
yuuji@53 375 (setq fg (substring sectcol 0 (string-match "/" sectcol))
yuuji@53 376 bg (substring sectcol (1+ (string-match "/" sectcol)))
yuuji@53 377 colorvalue (x-color-values fg)
yuuji@53 378 fR (/ (nth 0 colorvalue) 256)
yuuji@53 379 fG (/ (nth 1 colorvalue) 256)
yuuji@53 380 fB (/ (nth 2 colorvalue) 256)
yuuji@53 381 colorvalue (x-color-values bg)
yuuji@53 382 bR (/ (nth 0 colorvalue) 256)
yuuji@53 383 bG (/ (nth 1 colorvalue) 256)
yuuji@53 384 bB (/ (nth 2 colorvalue) 256)
yuuji@57 385 lm YaTeX-sectioning-max-level
yuuji@53 386 list YaTeX-sectioning-level)
yuuji@53 387 (while list
yuuji@59 388 (setq pat (concat YaTeX-ec-regexp (car (car list))
yuuji@69 389 ;"\\*?\\(\\[[^]]*\\]\\)?\\>" ;改行はさむと駄目
yuuji@64 390 "\\>"
yuuji@64 391 )
yuuji@53 392 level (cdr (car list))
yuuji@53 393 fg (format "hex-%02x%02x%02x"
yuuji@57 394 (- fR (/ (* level fR fmin) lm 100))
yuuji@57 395 (- fG (/ (* level fG fmin) lm 100))
yuuji@57 396 (- fB (/ (* level fB fmin) lm 100)))
yuuji@53 397 bg (format "hex-%02x%02x%02x"
yuuji@57 398 (- bR (/ (* level bR bmin) lm 100))
yuuji@57 399 (- bG (/ (* level bG bmin) lm 100))
yuuji@57 400 (- bB (/ (* level bB bmin) lm 100)))
yuuji@53 401 from (intern (format "sectioning-%d" level))
yuuji@53 402 face (intern (concat fg "/" bg)))
yuuji@53 403 (hilit-translate from face)
yuuji@53 404 (setq sect-pat-alist
yuuji@53 405 (cons;;(list pat "}" face)
yuuji@53 406 (list 'YaTeX-19-region-section-type pat face)
yuuji@53 407 sect-pat-alist))
yuuji@53 408 (setq list (cdr list)))
yuuji@53 409 (setq YaTeX-sectioning-patterns-alist sect-pat-alist))))))
yuuji@52 410
yuuji@53 411 ;; ローカルなマクロを読み込んだ後 redraw すると
yuuji@53 412 ;; ローカルマクロを keyword として光らせる(keywordじゃまずいかな…)。
yuuji@53 413 (defun YaTeX-19-collect-macros ()
yuuji@46 414 (cond
yuuji@46 415 ((and (featurep 'hilit19) (fboundp 'hilit-translate))
yuuji@47 416 (let ((get-face
yuuji@47 417 (function
yuuji@47 418 (lambda (table)
yuuji@47 419 (cond
yuuji@47 420 ((eq hilit-background-mode 'light) (car table))
yuuji@47 421 ((eq hilit-background-mode 'dark) (car (cdr table)))
yuuji@57 422 (t nil)))))
yuuji@57 423 sect single)
yuuji@47 424 (hilit-translate
yuuji@52 425 ;;sectioning (funcall get-face YaTeX-hilit-sectioning-face)
yuuji@57 426 macro (funcall get-face YaTeX-hilit-singlecmd-face))
yuuji@57 427 (if (setq sect (append user-section-table tmp-section-table))
yuuji@57 428 (setq sect (concat "\\\\\\("
yuuji@57 429 (mapconcat
yuuji@57 430 (function
yuuji@57 431 (lambda (s) (regexp-quote (car s))))
yuuji@57 432 sect
yuuji@57 433 "\\|")
yuuji@64 434 "\\)\\>")))
yuuji@57 435 (if (setq single (append user-singlecmd-table tmp-singlecmd-table))
yuuji@57 436 (setq single (concat "\\\\\\("
yuuji@57 437 (mapconcat
yuuji@57 438 (function (lambda (s) (regexp-quote (car s))))
yuuji@57 439 single
yuuji@57 440 "\\|")
yuuji@57 441 "\\)\\b")))
yuuji@57 442 (setq hilit-patterns-alist ;Remove at first.
yuuji@57 443 (delq (assq 'yatex-mode hilit-patterns-alist) hilit-patterns-alist)
yuuji@57 444 hilit-patterns-alist
yuuji@57 445 (cons
yuuji@57 446 (cons 'yatex-mode
yuuji@57 447 (append
yuuji@57 448 (list nil)
yuuji@57 449 YaTeX-sectioning-patterns-alist
yuuji@57 450 YaTeX-hilit-pattern-adjustment-private
yuuji@57 451 ;;YaTeX-hilit-pattern-adjustment-default
yuuji@57 452 YaTeX-hilit-patterns-alist
yuuji@57 453 (delq nil
yuuji@57 454 (list
yuuji@57 455 (if sect (list
yuuji@57 456 'YaTeX-19-region-section-type
yuuji@57 457 sect
yuuji@57 458 'keyword))
yuuji@57 459 (if single (list single 0 'macro))))))
yuuji@57 460 hilit-patterns-alist))))))
yuuji@53 461 ;;(YaTeX-19-collect-macros) ;causes an error
yuuji@46 462 (defun YaTeX-hilit-recenter (arg)
yuuji@46 463 "Collect current local macro and hilit-recenter."
yuuji@46 464 (interactive "P")
yuuji@53 465 (YaTeX-19-collect-macros)
yuuji@46 466 (hilit-recenter arg))
yuuji@46 467 (if (fboundp 'hilit-recenter) ;Replace hilit-recenter with
yuuji@46 468 (mapcar (function (lambda (key) ;YaTeX-hilit-recenter in yatex-mode
yuuji@46 469 (define-key YaTeX-mode-map key 'YaTeX-hilit-recenter)))
yuuji@46 470 (where-is-internal 'hilit-recenter)))
yuuji@46 471
yuuji@53 472 (defun YaTeX-switch-to-new-window ()
yuuji@53 473 (let ((c 0) (i 1) (free (make-string win:max-configs ? )))
yuuji@53 474 (while (< i win:max-configs)
yuuji@53 475 (or (aref win:configs i) (aset free i (+ i win:base-key)))
yuuji@53 476 (setq i (1+ i)))
yuuji@53 477 (while (not (string-match (char-to-string c) free))
yuuji@53 478 (message "Which window to create? [%s]: " free)
yuuji@53 479 (setq c (read-char)))
yuuji@53 480 (message "Creating window [%c]" c)
yuuji@53 481 (set-buffer (get-buffer-create "*scratch*"))
yuuji@53 482 (win:switch-window (- c win:base-key))))
yuuji@53 483
yuuji@53 484 (defun YaTeX-visit-main-other-frame ()
yuuji@53 485 "Visit main file in other frame.
yuuji@53 486 WARNING, This code is not perfect."
yuuji@53 487 (interactive)
yuuji@53 488 (if (YaTeX-main-file-p) (message "I think this is main LaTeX source.")
yuuji@53 489 (let (parent)
yuuji@53 490 (save-excursion (YaTeX-visit-main t) (setq parent (current-buffer)))
yuuji@53 491 (cond
yuuji@53 492 ((get-buffer-window parent t)
yuuji@53 493 (goto-buffer-window parent))
yuuji@53 494 ((and (featurep 'windows) win:use-frame)
yuuji@53 495 (YaTeX-switch-to-new-window)
yuuji@53 496 (switch-to-buffer parent))
yuuji@53 497 (t (switch-to-buffer-other-frame (buffer-name parent)))))))
yuuji@53 498
yuuji@53 499 (defun YaTeX-goto-corresponding-*-other-frame (arg)
yuuji@53 500 "Go to corresponding object in other frame."
yuuji@53 501 (interactive "P")
yuuji@53 502 (let (b p)
yuuji@53 503 (save-window-excursion
yuuji@53 504 (save-excursion
yuuji@53 505 (YaTeX-goto-corresponding-* arg)
yuuji@53 506 (setq b (current-buffer) p (point))))
yuuji@53 507 (cond
yuuji@53 508 ((get-buffer-window b t)
yuuji@53 509 (goto-buffer-window b)
yuuji@53 510 (goto-char p))
yuuji@53 511 ((and (featurep 'windows) win:use-frame)
yuuji@53 512 (YaTeX-switch-to-new-window)
yuuji@53 513 (switch-to-buffer b)
yuuji@53 514 (goto-char p))
yuuji@53 515 (t (switch-to-buffer-other-frame (buffer-name b))
yuuji@53 516 (goto-char p))))
yuuji@53 517 )
yuuji@53 518
yuuji@49 519 ;;; reverseVideo にして hilit-background-mode を 'dark
yuuji@49 520 ;;; にしている人は数式などが暗くなりすぎて見づらいかもしれない。
yuuji@49 521 ;;; 次のコードを hilit19 をロードしている場所の直後に置くとちょっ
yuuji@49 522 ;;; とはまし。
yuuji@46 523 ;;; (if (eq hilit-background-mode 'dark)
yuuji@46 524 ;;; (hilit-translate
yuuji@46 525 ;;; string 'mediumspringgreen
yuuji@46 526 ;;; formula 'khaki
yuuji@46 527 ;;; label 'yellow-underlined))
yuuji@57 528 (and YaTeX-emacs-19
yuuji@64 529 (not (featurep 'xemacs))
yuuji@58 530 (boundp 'byte-compile-current-file)
yuuji@58 531 (if (and (boundp 'window-system) window-system)
yuuji@58 532 (require 'hilit19)
yuuji@58 533 (error "Byte compile this file on window system! Not `-nw'!")))
yuuji@46 534
yuuji@46 535 (provide 'yatex19)