yatex
annotate yatexpkg.el @ 78:5b19f901fa16
Initial revision
author | yuuji |
---|---|
date | Fri, 02 May 2003 11:23:59 +0000 |
parents | |
children | 0734be649cb8 |
rev | line source |
---|---|
yuuji@78 | 1 ;;; -*- Emacs-Lisp -*- |
yuuji@78 | 2 ;;; YaTeX package manager |
yuuji@78 | 3 ;;; yatexpkg.el |
yuuji@78 | 4 ;;; (c )2003 by HIROSE, Yuuji [yuuji@yatex.org] |
yuuji@78 | 5 ;;; Last modified Fri May 2 20:13:49 2003 on firestorm |
yuuji@78 | 6 ;;; $Id$ |
yuuji@78 | 7 |
yuuji@78 | 8 (defvar YaTeX-package-alist-default |
yuuji@78 | 9 '(("version" (env "comment")) ;by tsuchiya@pine.kuee.kyoto-u.ac.jp |
yuuji@78 | 10 |
yuuji@78 | 11 ("plext" (section "bou")) ;by yas.axis@ma.mni.ne.jp |
yuuji@78 | 12 |
yuuji@78 | 13 ("url" (section "url")) ;by fujieda@jaist.ac.jp |
yuuji@78 | 14 |
yuuji@78 | 15 ("fancybox" (section "shadowbox" "doublebox" "ovalbox" "Ovalbox")) |
yuuji@78 | 16 ("pifont" (section "ding")) |
yuuji@78 | 17 ("longtable" (env "longtable")) |
yuuji@78 | 18 ("ascmac" (env "screen" "boxnote" "shadebox" "itembox") |
yuuji@78 | 19 (maketitle "return" "Return" "yen") |
yuuji@78 | 20 (section "keytop")) |
yuuji@78 | 21 ("bm" (section "bm")) ;by aoyama@le.chiba-u.ac.jp |
yuuji@78 | 22 |
yuuji@78 | 23 ("graphicx" (section "includegraphics")) |
yuuji@78 | 24 ("alltt" (env "alltt")) |
yuuji@78 | 25 ("misc" (section "verbfile" "listing")) |
yuuji@78 | 26 ("eclbkbox" (env "breakbox"))) |
yuuji@78 | 27 "Default package vs. macro list") |
yuuji@78 | 28 |
yuuji@78 | 29 (defvar YaTeX-package-alist-private nil |
yuuji@78 | 30 "*User defined package vs. macro list. See also YaTeX-package-alist-default") |
yuuji@78 | 31 |
yuuji@78 | 32 (defun YaTeX-package-lookup (macro &optional type) |
yuuji@78 | 33 "Look up a package which contains a definition of MACRO. |
yuuji@78 | 34 Optional second argument TYPE limits the macro type. |
yuuji@78 | 35 TYPE is a symbol, one of 'env, 'section, 'maketitle." |
yuuji@78 | 36 (let ((list (append YaTeX-package-alist-private YaTeX-package-alist-default)) |
yuuji@78 | 37 element x pkg pkglist r) |
yuuji@78 | 38 (while list |
yuuji@78 | 39 (setq element (car list) |
yuuji@78 | 40 pkg (car element) |
yuuji@78 | 41 element (cdr element)) |
yuuji@78 | 42 (if (setq r (catch 'found |
yuuji@78 | 43 (while element |
yuuji@78 | 44 (setq x (car element)) |
yuuji@78 | 45 (and (YaTeX-member macro (cdr x)) |
yuuji@78 | 46 (or (null type) |
yuuji@78 | 47 (eq type (car x))) |
yuuji@78 | 48 (throw 'found (car x))) ;car x is type |
yuuji@78 | 49 (setq element (cdr element))))) |
yuuji@78 | 50 (setq pkglist (cons (cons pkg r) pkglist))) |
yuuji@78 | 51 (setq list (cdr list))) |
yuuji@78 | 52 pkglist)) |
yuuji@78 | 53 |
yuuji@78 | 54 (defvar YaTeX-package-resolved-list nil |
yuuji@78 | 55 "List of macros whose package is confirmed to be loaded.") |
yuuji@78 | 56 |
yuuji@78 | 57 (defun YaTeX-package-auto-usepackage (macro type) |
yuuji@78 | 58 "(Semi)Automatically add the \\usepackage line to main-file. |
yuuji@78 | 59 Search the usepackage for MACRO of the TYPE." |
yuuji@78 | 60 (let ((cb (current-buffer)) |
yuuji@78 | 61 (wc (current-window-configuration)) |
yuuji@78 | 62 (usepackage (concat YaTeX-ec "usepackage")) |
yuuji@78 | 63 (pkglist (YaTeX-package-lookup macro)) |
yuuji@78 | 64 (usepkgrx (concat |
yuuji@78 | 65 YaTeX-ec-regexp |
yuuji@78 | 66 "\\(usepackage\\|include\\)\\b")) |
yuuji@78 | 67 (register '(lambda () (set-buffer cb) |
yuuji@78 | 68 (set (make-local-variable 'YaTeX-package-resolved-list) |
yuuji@78 | 69 (cons macro YaTeX-package-resolved-list)))) |
yuuji@78 | 70 (begdoc (concat YaTeX-ec "begin{document}")) |
yuuji@78 | 71 pb pkg mb0) |
yuuji@78 | 72 (if (or (YaTeX-member macro YaTeX-package-resolved-list) |
yuuji@78 | 73 (null pkglist)) |
yuuji@78 | 74 nil ;nothing to do |
yuuji@78 | 75 ;; Search `usepackage' into main-file |
yuuji@78 | 76 (YaTeX-visit-main t) ;set buffer to parent file |
yuuji@78 | 77 (setq pb (current-buffer)) |
yuuji@78 | 78 (save-excursion |
yuuji@78 | 79 (save-restriction |
yuuji@78 | 80 (if (catch 'found |
yuuji@78 | 81 (goto-char (point-min)) |
yuuji@78 | 82 (YaTeX-search-active-forward ;if search fails, goto eob |
yuuji@78 | 83 begdoc YaTeX-comment-prefix nil 1) |
yuuji@78 | 84 (while (YaTeX-re-search-active-backward |
yuuji@78 | 85 usepkgrx YaTeX-comment-prefix nil t) |
yuuji@78 | 86 (setq mb0 (match-beginning 0)) |
yuuji@78 | 87 (skip-chars-forward "^{") |
yuuji@78 | 88 (let ((pl pkglist)) |
yuuji@78 | 89 (while pl ;(car pl)'s car is package, cdr is type |
yuuji@78 | 90 (if (looking-at (regexp-quote (car (car pl)))) |
yuuji@78 | 91 (throw 'found t)) |
yuuji@78 | 92 (setq pl (cdr pl))) |
yuuji@78 | 93 (goto-char mb0)))) |
yuuji@78 | 94 ;;corresponding \usepackage found |
yuuji@78 | 95 (funcall register) |
yuuji@78 | 96 ;; not found, insert it. |
yuuji@78 | 97 (if (y-or-n-p |
yuuji@78 | 98 (format "`%s' requires package. Put \\usepackage now?" macro)) |
yuuji@78 | 99 (progn |
yuuji@78 | 100 (setq pkg |
yuuji@78 | 101 (completing-read |
yuuji@78 | 102 "Load which package?(TAB for list): " |
yuuji@78 | 103 pkglist)) |
yuuji@78 | 104 (set-buffer pb) |
yuuji@78 | 105 (goto-char (point-min)) |
yuuji@78 | 106 (if (YaTeX-re-search-active-forward |
yuuji@78 | 107 (concat YaTeX-ec-regexp |
yuuji@78 | 108 "document\\(style\\|class\\){") |
yuuji@78 | 109 YaTeX-comment-prefix nil t) |
yuuji@78 | 110 (forward-line 1)) |
yuuji@78 | 111 (if (YaTeX-search-active-forward |
yuuji@78 | 112 begdoc YaTeX-comment-prefix nil t) |
yuuji@78 | 113 (goto-char (match-beginning 0))) |
yuuji@78 | 114 (insert |
yuuji@78 | 115 usepackage |
yuuji@78 | 116 (format "{%s}\t%% required for `\\%s' (yatex added)\n" |
yuuji@78 | 117 pkg macro)) |
yuuji@78 | 118 (funcall register)) |
yuuji@78 | 119 (message "Don't forget to put \\usepackage{%s} yourself later" |
yuuji@78 | 120 (car (car pkglist)))) ;doing car car is negligence... |
yuuji@78 | 121 )))))) |