annotate yatexpkg.el @ 78:5b19f901fa16

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

yatex.org