yatex
changeset 78:5b19f901fa16
Initial revision
author | yuuji |
---|---|
date | Fri, 02 May 2003 11:23:59 +0000 |
parents | 1b172d26b55e |
children | 0734be649cb8 |
files | yatexpkg.el |
diffstat | 1 files changed, 121 insertions(+), 0 deletions(-) [+] |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/yatexpkg.el Fri May 02 11:23:59 2003 +0000 1.3 @@ -0,0 +1,121 @@ 1.4 +;;; -*- Emacs-Lisp -*- 1.5 +;;; YaTeX package manager 1.6 +;;; yatexpkg.el 1.7 +;;; (c )2003 by HIROSE, Yuuji [yuuji@yatex.org] 1.8 +;;; Last modified Fri May 2 20:13:49 2003 on firestorm 1.9 +;;; $Id$ 1.10 + 1.11 +(defvar YaTeX-package-alist-default 1.12 + '(("version" (env "comment")) ;by tsuchiya@pine.kuee.kyoto-u.ac.jp 1.13 + 1.14 + ("plext" (section "bou")) ;by yas.axis@ma.mni.ne.jp 1.15 + 1.16 + ("url" (section "url")) ;by fujieda@jaist.ac.jp 1.17 + 1.18 + ("fancybox" (section "shadowbox" "doublebox" "ovalbox" "Ovalbox")) 1.19 + ("pifont" (section "ding")) 1.20 + ("longtable" (env "longtable")) 1.21 + ("ascmac" (env "screen" "boxnote" "shadebox" "itembox") 1.22 + (maketitle "return" "Return" "yen") 1.23 + (section "keytop")) 1.24 + ("bm" (section "bm")) ;by aoyama@le.chiba-u.ac.jp 1.25 + 1.26 + ("graphicx" (section "includegraphics")) 1.27 + ("alltt" (env "alltt")) 1.28 + ("misc" (section "verbfile" "listing")) 1.29 + ("eclbkbox" (env "breakbox"))) 1.30 + "Default package vs. macro list") 1.31 + 1.32 +(defvar YaTeX-package-alist-private nil 1.33 + "*User defined package vs. macro list. See also YaTeX-package-alist-default") 1.34 + 1.35 +(defun YaTeX-package-lookup (macro &optional type) 1.36 + "Look up a package which contains a definition of MACRO. 1.37 +Optional second argument TYPE limits the macro type. 1.38 +TYPE is a symbol, one of 'env, 'section, 'maketitle." 1.39 + (let ((list (append YaTeX-package-alist-private YaTeX-package-alist-default)) 1.40 + element x pkg pkglist r) 1.41 + (while list 1.42 + (setq element (car list) 1.43 + pkg (car element) 1.44 + element (cdr element)) 1.45 + (if (setq r (catch 'found 1.46 + (while element 1.47 + (setq x (car element)) 1.48 + (and (YaTeX-member macro (cdr x)) 1.49 + (or (null type) 1.50 + (eq type (car x))) 1.51 + (throw 'found (car x))) ;car x is type 1.52 + (setq element (cdr element))))) 1.53 + (setq pkglist (cons (cons pkg r) pkglist))) 1.54 + (setq list (cdr list))) 1.55 + pkglist)) 1.56 + 1.57 +(defvar YaTeX-package-resolved-list nil 1.58 + "List of macros whose package is confirmed to be loaded.") 1.59 + 1.60 +(defun YaTeX-package-auto-usepackage (macro type) 1.61 + "(Semi)Automatically add the \\usepackage line to main-file. 1.62 +Search the usepackage for MACRO of the TYPE." 1.63 + (let ((cb (current-buffer)) 1.64 + (wc (current-window-configuration)) 1.65 + (usepackage (concat YaTeX-ec "usepackage")) 1.66 + (pkglist (YaTeX-package-lookup macro)) 1.67 + (usepkgrx (concat 1.68 + YaTeX-ec-regexp 1.69 + "\\(usepackage\\|include\\)\\b")) 1.70 + (register '(lambda () (set-buffer cb) 1.71 + (set (make-local-variable 'YaTeX-package-resolved-list) 1.72 + (cons macro YaTeX-package-resolved-list)))) 1.73 + (begdoc (concat YaTeX-ec "begin{document}")) 1.74 + pb pkg mb0) 1.75 + (if (or (YaTeX-member macro YaTeX-package-resolved-list) 1.76 + (null pkglist)) 1.77 + nil ;nothing to do 1.78 + ;; Search `usepackage' into main-file 1.79 + (YaTeX-visit-main t) ;set buffer to parent file 1.80 + (setq pb (current-buffer)) 1.81 + (save-excursion 1.82 + (save-restriction 1.83 + (if (catch 'found 1.84 + (goto-char (point-min)) 1.85 + (YaTeX-search-active-forward ;if search fails, goto eob 1.86 + begdoc YaTeX-comment-prefix nil 1) 1.87 + (while (YaTeX-re-search-active-backward 1.88 + usepkgrx YaTeX-comment-prefix nil t) 1.89 + (setq mb0 (match-beginning 0)) 1.90 + (skip-chars-forward "^{") 1.91 + (let ((pl pkglist)) 1.92 + (while pl ;(car pl)'s car is package, cdr is type 1.93 + (if (looking-at (regexp-quote (car (car pl)))) 1.94 + (throw 'found t)) 1.95 + (setq pl (cdr pl))) 1.96 + (goto-char mb0)))) 1.97 + ;;corresponding \usepackage found 1.98 + (funcall register) 1.99 + ;; not found, insert it. 1.100 + (if (y-or-n-p 1.101 + (format "`%s' requires package. Put \\usepackage now?" macro)) 1.102 + (progn 1.103 + (setq pkg 1.104 + (completing-read 1.105 + "Load which package?(TAB for list): " 1.106 + pkglist)) 1.107 + (set-buffer pb) 1.108 + (goto-char (point-min)) 1.109 + (if (YaTeX-re-search-active-forward 1.110 + (concat YaTeX-ec-regexp 1.111 + "document\\(style\\|class\\){") 1.112 + YaTeX-comment-prefix nil t) 1.113 + (forward-line 1)) 1.114 + (if (YaTeX-search-active-forward 1.115 + begdoc YaTeX-comment-prefix nil t) 1.116 + (goto-char (match-beginning 0))) 1.117 + (insert 1.118 + usepackage 1.119 + (format "{%s}\t%% required for `\\%s' (yatex added)\n" 1.120 + pkg macro)) 1.121 + (funcall register)) 1.122 + (message "Don't forget to put \\usepackage{%s} yourself later" 1.123 + (car (car pkglist)))) ;doing car car is negligence... 1.124 + ))))))