From 4af584809810fa88c6faa26f19a9d07665c30361 Mon Sep 17 00:00:00 2001 From: Carsten Dominik Date: Wed, 22 Feb 2006 07:21:09 +0000 Subject: [PATCH] (reftex-locate-file): Search all extensions if `reftex-try-all-extensions' is set. --- lisp/textmodes/reftex.el | 48 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/lisp/textmodes/reftex.el b/lisp/textmodes/reftex.el index cb2e960225d..b8ed941fcae 100644 --- a/lisp/textmodes/reftex.el +++ b/lisp/textmodes/reftex.el @@ -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 @@ When DIE is non-nil, throw an error if file not found." (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'. -- 2.39.5