# HG changeset patch # User Carsten Dominik # Date 1140592869 0 # Node ID 0ab6ebe82ad71b8a515da3ea4b2943e3e7a9045f # Parent eaa1a08589a4dd8b1c6a3e5d9664d4e2fb5326ac (reftex-locate-file): Search all extensions if `reftex-try-all-extensions' is set. diff -r eaa1a08589a4 -r 0ab6ebe82ad7 lisp/textmodes/reftex.el --- 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 -;; 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'.