diff lisp/textmodes/reftex-auc.el @ 25280:9b601931b795

Initial revision
author Carsten Dominik <dominik@science.uva.nl>
date Mon, 16 Aug 1999 07:42:41 +0000
parents
children 7ed67319c5aa
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lisp/textmodes/reftex-auc.el	Mon Aug 16 07:42:41 1999 +0000
@@ -0,0 +1,190 @@
+;;; reftex-auc.el - RefTeX's interface to AUC TeX
+;;; Version: 4.5
+;;;
+;;; See main file reftex.el for licensing information
+
+(provide 'reftex-auc)
+(require 'reftex)
+;;;
+
+(defun reftex-plug-flag (which)
+  ;; Tell if a certain flag is set in reftex-plug-into-AUCTeX
+  (or (eq t reftex-plug-into-AUCTeX)
+      (and (listp reftex-plug-into-AUCTeX)
+	   (nth which reftex-plug-into-AUCTeX))))
+
+(defun reftex-arg-label (optional &optional prompt definition)
+  "Use `reftex-label', `reftex-reference' or AUCTeX's code to insert label arg.
+What is being used depends upon `reftex-plug-into-AUCTeX'."
+  (let (label)
+    (cond
+     ((and definition (reftex-plug-flag 1))
+      ;; Create a new label, with a temporary brace for `reftex-what-macro'
+      (unwind-protect
+	  (progn (insert "{") (setq label (or (reftex-label nil t) "")))
+	(delete-backward-char 1)))
+     ((and (not definition) (reftex-plug-flag 2))
+      ;; Reference a label with RefTeX
+      (setq label (reftex-reference nil t)))
+     (t
+      ;; AUCTeX's default mechanism
+      (setq label (completing-read (TeX-argument-prompt optional prompt "Key")
+				   (LaTeX-label-list)))))
+    (if (and definition (not (string-equal "" label)))
+	(LaTeX-add-labels label))
+    (TeX-argument-insert label optional)))
+
+(defun reftex-arg-cite (optional &optional prompt definition)
+  "Use `reftex-citation' or AUCTeX's code to insert a cite-key macro argument.
+What is being used depends upon `reftex-plug-into-AUCTeX'."
+  (let (items)
+    (cond
+     ((and (not definition) (reftex-plug-flag 3))
+      (setq items (list (or (reftex-citation t) ""))))
+     (t
+      (setq prompt (concat (if optional "(Optional) " "")
+			   (if prompt prompt "Add key")
+			   ": (default none) "))
+      (setq items (multi-prompt "," t prompt (LaTeX-bibitem-list)))))
+    (apply 'LaTeX-add-bibitems items)
+    (TeX-argument-insert (mapconcat 'identity items ",") optional)))
+
+
+(defun reftex-arg-index-tag (optional &optional prompt &rest args)
+  "Prompt for an index tag with completion. 
+This is the name of an index, not the entry."
+  (let (tag taglist)
+    (setq prompt (concat (if optional "(Optional) " "")
+			 (if prompt prompt "Index tag")
+			 ": (default none) "))
+    (if (and reftex-support-index (reftex-plug-flag 4))
+	;; Use RefTeX completion
+	(progn
+	  (reftex-access-scan-info nil)
+	  (setq taglist 
+		(cdr (assoc 'index-tags 
+			    (symbol-value reftex-docstruct-symbol)))
+		tag (completing-read prompt (mapcar 'list taglist))))
+      ;; Just ask like AUCTeX does.
+      (setq tag (read-string prompt)))
+    (TeX-argument-insert tag optional)))
+
+(defun reftex-arg-index (optional &optional prompt &rest args)
+  "Prompt for an index entry completing with known entries.
+Completion is specific for just one index, if the macro or a tag
+argument identify one of multiple indices."
+  (let* (tag key)
+    (if (and reftex-support-index (reftex-plug-flag 4))
+	(progn
+	  (reftex-access-scan-info nil)
+	  (setq tag (reftex-what-index-tag)
+		key (reftex-index-complete-key (or tag "idx"))))
+      (setq key (completing-read (TeX-argument-prompt optional prompt "Key")
+				 (LaTeX-index-entry-list))))
+    (unless (string-equal "" key)
+      (LaTeX-add-index-entries key))
+    (TeX-argument-insert key optional)))
+
+(defun reftex-what-index-tag ()
+  ;; Look backward to find out what index the macro at point belongs to
+  (let ((macro (save-excursion
+		 (and (re-search-backward "\\\\[a-zA-Z*]+" nil t)
+		      (match-string 0))))
+	tag entry)
+    (when (and macro
+	       (setq entry (assoc macro reftex-index-macro-alist)))
+      (setq tag (nth 1 entry))
+      (cond
+       ((stringp tag) tag)
+       ((integerp tag)
+	(save-excursion
+	  (goto-char (match-end 1))
+	  (or (reftex-nth-arg tag (nth 6 entry)) "idx")))
+       (t "idx")))))
+
+(defvar LaTeX-label-function)
+(defun reftex-plug-into-AUCTeX ()
+  ;; Replace AUCTeX functions with RefTeX functions.
+  ;; Which functions are replaced is controlled by the variable
+  ;; `reftex-plug-into-AUCTeX'.
+  
+  (if (reftex-plug-flag 0)
+      (setq LaTeX-label-function 'reftex-label)
+    (setq LaTeX-label-function nil))
+
+  (and (or (reftex-plug-flag 1) (reftex-plug-flag 2))
+       (fboundp 'TeX-arg-label)
+       (fset 'TeX-arg-label 'reftex-arg-label))
+
+  (and (reftex-plug-flag 3)
+       (fboundp 'TeX-arg-cite)
+       (fset 'TeX-arg-cite 'reftex-arg-cite))
+  
+  (and (reftex-plug-flag 4) 
+       (fboundp 'TeX-arg-index-tag)
+       (fset 'TeX-arg-index-tag 'reftex-arg-index-tag))
+  (and (reftex-plug-flag 4) 
+       (fboundp 'TeX-arg-index)
+       (fset 'TeX-arg-index 'reftex-arg-index)))
+
+(defun reftex-toggle-plug-into-AUCTeX ()
+  "Toggle Interface between AUCTeX and RefTeX on and off."
+  (interactive)
+  (unless (and (featurep 'tex-site) (featurep 'latex))
+    (error "AUCTeX's LaTeX mode does not seem to be loaded"))
+  (setq reftex-plug-into-AUCTeX (not reftex-plug-into-AUCTeX))
+  (reftex-plug-into-AUCTeX)
+  (if reftex-plug-into-AUCTeX
+      (message "RefTeX has been plugged into AUCTeX.")
+    (message "RefTeX no longer interacts with AUCTeX.")))
+
+(defun reftex-add-label-environments (entry-list)
+  "Add label environment descriptions to `reftex-label-alist-style'.
+The format of ENTRY-LIST is exactly like `reftex-label-alist'.  See there
+for details.
+This function makes it possible to support RefTeX from AUCTeX style files.
+The entries in ENTRY-LIST will be processed after the user settings in
+`reftex-label-alist', and before the defaults (specified in
+`reftex-default-label-alist-entries').  Any changes made to
+`reftex-label-alist-style' will raise a flag to the effect that
+the label information is recompiled on next use."
+  (unless reftex-docstruct-symbol
+    (reftex-tie-multifile-symbols))
+  (when (and reftex-docstruct-symbol
+	     (symbolp reftex-docstruct-symbol))
+    (let ((list (get reftex-docstruct-symbol 'reftex-label-alist-style))
+	  entry changed)
+      (while entry-list
+	(setq entry (pop entry-list))
+	(unless (member entry list)
+	  (setq reftex-tables-dirty t
+		changed t)
+	  (push entry list)))
+      (when changed
+	(put reftex-docstruct-symbol 'reftex-label-alist-style list)))))
+(defalias 'reftex-add-to-label-alist 'reftex-add-label-environments)
+
+(defun reftex-add-section-levels (entry-list)
+  "Add entries to the value of `reftex-section-levels'.
+The added values are kept local to the current document.  The format
+of ENTRY-LIST is a list of cons cells (\"MACRONAME\" . LEVEL).  See
+`reftex-section-levels' for an example."
+  (unless reftex-docstruct-symbol
+    (reftex-tie-multifile-symbols))
+  (when (and reftex-docstruct-symbol
+	     (symbolp reftex-docstruct-symbol))
+    (let ((list (get reftex-docstruct-symbol 'reftex-section-levels))
+	  entry changed)
+      (while entry-list
+	(setq entry (pop entry-list))
+	(unless (member entry list)
+	  (setq reftex-tables-dirty t
+		changed t)
+	  (push entry list)))
+      (when changed
+	(put reftex-docstruct-symbol 'reftex-section-levels list)))))
+
+(defun reftex-notice-new-section ()
+  (reftex-notice-new 1 'force))
+
+;;; reftex-auc.el ends here