changeset 69093:0ab6ebe82ad7

(reftex-locate-file): Search all extensions if `reftex-try-all-extensions' is set.
author Carsten Dominik <dominik@science.uva.nl>
date Wed, 22 Feb 2006 07:21:09 +0000
parents eaa1a08589a4
children bfd5c5e60410
files lisp/textmodes/reftex.el
diffstat 1 files changed, 46 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/textmodes/reftex.el	Wed Feb 22 07:20:54 2006 +0000
+++ b/lisp/textmodes/reftex.el	Wed Feb 22 07:21:09 2006 +0000
@@ -3,7 +3,7 @@
 ;;   2006 Free Software Foundation, Inc.
 
 ;; Author: Carsten Dominik <dominik@science.uva.nl>
-;; Version: VERSIONTAG
+;; Version: 4.31
 ;; Keywords: tex
 
 ;; This file is part of GNU Emacs.
@@ -301,7 +301,7 @@
 ;;; Define the formal stuff for a minor mode named RefTeX.
 ;;;
 
-(defconst reftex-version "RefTeX version VERSIONTAG"
+(defconst reftex-version "RefTeX version 4.31"
   "Version string for RefTeX.")
 
 (defvar reftex-mode nil
@@ -1466,6 +1466,50 @@
           (die (error "No such file: %s" file) nil)
           (t (message "No such file: %s (ignored)" file) nil))))
 
+
+;; FIXME:  this still needs testing and thinking.
+(defun reftex-locate-file (file type master-dir &optional die)
+  "Find FILE of type TYPE in MASTER-DIR or on the path associcted with TYPE.
+If the file does not have any of the valid extensions for TYPE,
+try first the default extension and only then the naked file name.
+When DIE is non-nil, throw an error if file not found."
+  (let* ((rec-values (if reftex-search-unrecursed-path-first '(nil t) '(t)))
+         (extensions (cdr (assoc type reftex-file-extensions)))
+         (def-ext (car extensions))
+         (ext-re (concat "\\(" 
+                         (mapconcat 'regexp-quote extensions "\\|")
+                         "\\)\\'"))
+         (files (if (string-match ext-re file)
+                    (cons file nil)
+		  (if reftex-try-all-extensions
+		      (append (mapcar (lambda (x) (concat file x))
+				      extensions)
+			      (list file))
+		    (list (concat file def-ext) file))))
+         path old-path file1 f fs)
+    (cond
+     ((file-name-absolute-p file)
+      (while (setq f (pop files))
+	(if (file-regular-p f)
+	    (setq file1 f files nil))))
+     ((and reftex-use-external-file-finders
+           (assoc type reftex-external-file-finders))
+      (setq file1 (reftex-find-file-externally file type master-dir)))
+     (t
+      (while (and (null file1) rec-values)
+        (setq path (reftex-access-search-path
+                    type (pop rec-values) master-dir file))
+	(setq fs files)
+	(while (and (null file1) (setq f (pop fs)))
+	  (when (or (null old-path)
+		    (not (eq old-path path)))
+	    (setq old-path path
+		  path (cons master-dir path))
+	    (setq file1 (reftex-find-file-on-path f path master-dir)))))))
+    (cond (file1 file1)
+          (die (error "No such file: %s" file) nil)
+          (t (message "No such file: %s (ignored)" file) nil))))
+
 (defun reftex-find-file-externally (file type &optional master-dir)
   ;; Use external program to find FILE.
   ;; The program is taken from `reftex-external-file-finders'.