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 wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/yatexpkg.el	Fri May 02 11:23:59 2003 +0000
@@ -0,0 +1,121 @@
+;;; -*- Emacs-Lisp -*-
+;;; YaTeX package manager
+;;; yatexpkg.el
+;;; (c )2003 by HIROSE, Yuuji [yuuji@yatex.org]
+;;; Last modified Fri May  2 20:13:49 2003 on firestorm
+;;; $Id$
+
+(defvar YaTeX-package-alist-default
+  '(("version"	(env "comment"))	;by tsuchiya@pine.kuee.kyoto-u.ac.jp
+
+    ("plext"	(section "bou"))	;by yas.axis@ma.mni.ne.jp
+
+    ("url"	(section "url"))	;by fujieda@jaist.ac.jp
+
+    ("fancybox"	(section "shadowbox" "doublebox" "ovalbox" "Ovalbox"))
+    ("pifont"	(section "ding"))
+    ("longtable" (env "longtable"))
+    ("ascmac"	(env "screen" "boxnote" "shadebox" "itembox")
+		(maketitle "return" "Return" "yen")
+     		(section "keytop"))
+    ("bm"	(section "bm"))		;by aoyama@le.chiba-u.ac.jp
+
+    ("graphicx"	(section "includegraphics"))
+    ("alltt"	(env "alltt"))
+    ("misc"	(section "verbfile" "listing"))
+    ("eclbkbox"	(env "breakbox")))
+  "Default package vs. macro list")
+
+(defvar YaTeX-package-alist-private nil
+  "*User defined package vs. macro list. See also YaTeX-package-alist-default")
+
+(defun YaTeX-package-lookup (macro &optional type)
+  "Look up a package which contains a definition of MACRO.
+Optional second argument TYPE limits the macro type.
+TYPE is a symbol, one of 'env, 'section, 'maketitle."
+  (let ((list (append YaTeX-package-alist-private YaTeX-package-alist-default))
+	element x pkg pkglist r)
+    (while list
+      (setq element (car list)
+	    pkg (car element)
+	    element (cdr element))
+      (if (setq r (catch 'found
+		    (while element
+		      (setq x (car element))
+		      (and (YaTeX-member macro (cdr x))
+			   (or (null type)
+			       (eq type (car x)))
+			   (throw 'found (car x)))	;car x is type
+		      (setq element (cdr element)))))
+	  (setq pkglist (cons (cons pkg r) pkglist)))
+      (setq list (cdr list)))
+    pkglist))
+
+(defvar YaTeX-package-resolved-list nil
+  "List of macros whose package is confirmed to be loaded.")
+
+(defun YaTeX-package-auto-usepackage (macro type)
+  "(Semi)Automatically add the \\usepackage line to main-file.
+Search the usepackage for MACRO of the TYPE."
+  (let ((cb (current-buffer))
+	(wc (current-window-configuration))
+	(usepackage (concat YaTeX-ec "usepackage"))
+	(pkglist (YaTeX-package-lookup macro))
+	(usepkgrx (concat
+		   YaTeX-ec-regexp
+		   "\\(usepackage\\|include\\)\\b"))
+	(register '(lambda () (set-buffer cb)
+		     (set (make-local-variable 'YaTeX-package-resolved-list)
+			  (cons macro YaTeX-package-resolved-list))))
+	(begdoc (concat YaTeX-ec "begin{document}"))
+	pb pkg mb0)
+    (if (or (YaTeX-member macro YaTeX-package-resolved-list)
+	    (null pkglist))
+	nil				;nothing to do
+      ;; Search `usepackage' into main-file
+      (YaTeX-visit-main t)		;set buffer to parent file
+      (setq pb (current-buffer))
+      (save-excursion
+	(save-restriction
+	  (if (catch 'found
+		(goto-char (point-min))
+		(YaTeX-search-active-forward	;if search fails, goto eob
+		 begdoc YaTeX-comment-prefix nil 1)
+		(while (YaTeX-re-search-active-backward
+			usepkgrx YaTeX-comment-prefix nil t)
+		  (setq mb0 (match-beginning 0))
+		  (skip-chars-forward "^{")
+		  (let ((pl pkglist))
+		    (while pl		;(car pl)'s car is package, cdr is type
+		      (if (looking-at (regexp-quote (car (car pl))))
+			  (throw 'found t))
+		      (setq pl (cdr pl)))
+		    (goto-char mb0))))
+	      ;;corresponding \usepackage found
+	      (funcall register)
+	    ;; not found, insert it.
+	    (if (y-or-n-p
+		 (format "`%s' requires package. Put \\usepackage now?" macro))
+		(progn
+		  (setq pkg
+			(completing-read
+			 "Load which package?(TAB for list): "
+			 pkglist))
+		  (set-buffer pb)
+		  (goto-char (point-min))
+		  (if (YaTeX-re-search-active-forward
+		       (concat YaTeX-ec-regexp
+			       "document\\(style\\|class\\){")
+		       YaTeX-comment-prefix nil t)
+		      (forward-line 1))
+		  (if (YaTeX-search-active-forward
+		       begdoc YaTeX-comment-prefix nil t)
+		      (goto-char (match-beginning 0)))
+		  (insert
+		   usepackage
+		   (format "{%s}\t%% required for `\\%s' (yatex added)\n"
+			   pkg macro))
+		  (funcall register))
+	      (message "Don't forget to put \\usepackage{%s} yourself later"
+		       (car (car pkglist)))) ;doing car car is negligence...
+    ))))))

yatex.org