auctex-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[AUCTeX-diffs] Changes to auctex/tex.el,v


From: Ralf Angeli
Subject: [AUCTeX-diffs] Changes to auctex/tex.el,v
Date: Sat, 22 Jan 2011 16:24:30 +0000

CVSROOT:        /cvsroot/auctex
Module name:    auctex
Changes by:     Ralf Angeli <angeli>    11/01/22 16:24:30

Index: tex.el
===================================================================
RCS file: /cvsroot/auctex/auctex/tex.el,v
retrieving revision 5.671
retrieving revision 5.672
diff -u -b -r5.671 -r5.672
--- tex.el      5 Dec 2010 20:48:13 -0000       5.671
+++ tex.el      22 Jan 2011 16:24:29 -0000      5.672
@@ -1,8 +1,8 @@
 ;;; tex.el --- Support for TeX documents.
 
 ;; Copyright (C) 1985, 1986, 1987, 1991, 1993, 1994, 1996, 1997, 1999,
-;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-;;   Free Software Foundation, Inc.
+;;   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+;;   2011 Free Software Foundation, Inc.
 
 ;; Maintainer: address@hidden
 ;; Keywords: tex
@@ -2063,61 +2063,50 @@
          (setq answers (cons entry answers))))
     answers))
 
-(defun TeX-macro-global ()
-  "Return directories containing the site's TeX macro and style files."
-  (or (TeX-tree-expand '("$SYSTEXMF" "$TEXMFLOCAL" "$TEXMFMAIN" "$TEXMFDIST")
-                      "latex" '("/tex/" "/bibtex/bst/"))
-      '("/usr/share/texmf/tex/" "/usr/share/texmf/bibtex/bst/")))
-
-(defun TeX-macro-private ()
-  "Return directories containing the user's TeX macro and style files."
-  (TeX-tree-expand '("$TEXMFHOME") "latex" '("/tex/" "/bibtex/bst/")))
-
-(defun TeX-tree-expand (trees program subdirs)
-  "Return directories corresponding to the TeX trees TREES.
-This is done calling `kpsewhich' where PROGRAM is passed as the
-parameter for --progname.  SUBDIRS are subdirectories which are
-appended to the directories of the TeX trees."
+(defun TeX-tree-expand (vars program &optional subdirs)
+  "Return directories corresponding to the kpathsea variables VARS.
+This is done calling `kpsewhich --expand-path' for each variable.
+PROGRAM is passed as the parameter for --progname.  SUBDIRS are
+subdirectories which are appended to the directories of the TeX
+trees.  Only existing directories are returned."
   (let (path-list path exit-status input-dir-list)
     (condition-case nil
-       (catch 'success
-         (dotimes (i (safe-length trees))
-           (setq path (with-output-to-string
-                        (setq exit-status
-                              (call-process
-                               "kpsewhich"  nil
-                               (list standard-output nil) nil
-                               "--progname" program
-                               "--expand-braces" (nth i trees)))))
-           (if (zerop exit-status)
-               (progn (add-to-list 'path-list path)
-                      (when (zerop i) (throw 'success nil)))
+       (dolist (var vars)
              (setq path (with-output-to-string
-                          (setq exit-status
-                                (call-process
+                      (setq exit-status (call-process
                                  "kpsewhich"  nil
                                  (list standard-output nil) nil
                                  "--progname" program
-                                 "--expand-path" (nth i trees)))))
-             (when (zerop exit-status) (add-to-list 'path-list path)))))
+                                         "--expand-path" var))))
+         (when (zerop exit-status)
+           (add-to-list 'path-list path t)))
       (error nil))
     (dolist (elt path-list)
-      (let ((separators (if (string-match "^[A-Za-z]:" elt)
-                           "[\n\r;]"
-                         "[\n\r:]")))
+      (let ((separators (if (string-match ";" elt) "[\n\r;]" "[\n\r:]")))
        (dolist (item (condition-case nil
                          (split-string elt separators t)
                        ;; COMPATIBILITY for XEmacs <= 21.4.15
                        (error (delete "" (split-string elt separators)))))
-         (when (string-match "^!+" item)
-           (setq item (substring item (match-end 0) (length item))))
-         (when (string-match "/+$" item)
-           (setq item (substring item 0 (match-beginning 0))))
+         (if subdirs
          (dolist (subdir subdirs)
-           (when (file-exists-p (file-name-as-directory (concat item subdir)))
-             (add-to-list 'input-dir-list (concat item subdir)))))))
+               (setq path (file-name-as-directory (concat item subdir)))
+               (when (file-exists-p path)
+                 (add-to-list 'input-dir-list path t)))
+           (setq path (file-name-as-directory item))
+           (when (file-exists-p path)
+             (add-to-list 'input-dir-list path t))))))
     input-dir-list))
 
+(defun TeX-macro-global ()
+  "Return directories containing the site's TeX macro and style files."
+  (or (TeX-tree-expand '("$SYSTEXMF" "$TEXMFLOCAL" "$TEXMFMAIN" "$TEXMFDIST")
+                      "latex" '("/tex/" "/bibtex/bst/"))
+      '("/usr/share/texmf/tex/" "/usr/share/texmf/bibtex/bst/")))
+
+(defun TeX-macro-private ()
+  "Return directories containing the user's TeX macro and style files."
+  (TeX-tree-expand '("$TEXMFHOME") "latex" '("/tex/" "/bibtex/bst/")))
+
 (defcustom TeX-macro-global (TeX-macro-global)
   "Directories containing the site's TeX macro and style files."
   :group 'TeX-file
@@ -3104,6 +3093,24 @@
   :group 'TeX-file
   :type 'directory)
 
+(defcustom TeX-ignore-file
+  "\\(^\\|[/\\]\\)\\(\\.\\|\\.\\.\\|RCS\\|SCCS\\|CVS\\|babel\\..*\\)$"
+  "Regular expression matching file names to ignore.
+
+These files or directories will not be considered when searching for
+TeX files in a directory."
+  :group 'TeX-parse
+  :type 'regexp)
+
+(defcustom TeX-file-recurse t
+  "Whether to search TeX directories recursively.
+nil means do not recurse, a positive integer means go that far deep in the
+directory hierarchy, t means recurse indefinitely."
+  :group 'TeX-parse
+  :type '(choice (const :tag "On" t)
+                (const :tag "Off" nil)
+                (integer :tag "Depth" :value 1)))
+
 ;;;###autoload
 (defun TeX-auto-generate (tex auto)
   "Generate style file for TEX and store it in AUTO.
@@ -3217,6 +3224,22 @@
     "theenumv" "document" "par" "do" "expandafter")
   "List of symbols to ignore when scanning a TeX style file.")
 
+(defcustom TeX-auto-regexp-list 'TeX-auto-full-regexp-list
+  "List of regular expressions used for parsing the current file."
+  :type '(radio (variable-item TeX-auto-empty-regexp-list)
+               (variable-item TeX-auto-full-regexp-list)
+               (variable-item plain-TeX-auto-regexp-list)
+               (variable-item LaTeX-auto-minimal-regexp-list)
+               (variable-item LaTeX-auto-label-regexp-list)
+               (variable-item LaTeX-auto-regexp-list)
+               (symbol :tag "Other")
+               (repeat :tag "Specify"
+                       (group (regexp :tag "Match")
+                              (sexp :tag "Groups")
+                              symbol)))
+  :group 'TeX-parse)
+  (make-variable-buffer-local 'TeX-auto-regexp-list)
+
 (defun TeX-auto-add-regexp (regexp)
   "Add REGEXP to `TeX-auto-regexp-list' if not already a member."
   (if (symbolp TeX-auto-regexp-list)
@@ -3417,26 +3440,8 @@
            (add-to-list 'TeX-auto-symbol elt))
        (add-to-list 'TeX-auto-symbol symbol)))))
 
-;;; Utilities
-;;
-;; Some of these functions has little to do with TeX, but nonetheless we
-;; should use the "TeX-" prefix to avoid name clashes.
 
-(defcustom TeX-auto-regexp-list 'TeX-auto-full-regexp-list
-  "*List of regular expressions used for parsing the current file."
-  :type '(radio (variable-item TeX-auto-empty-regexp-list)
-               (variable-item TeX-auto-full-regexp-list)
-               (variable-item plain-TeX-auto-regexp-list)
-               (variable-item LaTeX-auto-minimal-regexp-list)
-               (variable-item LaTeX-auto-label-regexp-list)
-               (variable-item LaTeX-auto-regexp-list)
-               (symbol :tag "Other")
-               (repeat :tag "Specify"
-                       (group (regexp :tag "Match")
-                              (sexp :tag "Groups")
-                              symbol)))
-  :group 'TeX-parse)
-  (make-variable-buffer-local 'TeX-auto-regexp-list)
+;;; File Extensions
 
 (defgroup TeX-file-extension nil
   "File extensions recognized by AUCTeX."
@@ -3459,6 +3464,11 @@
 
   (make-variable-buffer-local 'TeX-default-extension)
 
+(defvar TeX-doc-extenstions
+  '("dvi" "pdf" "ps" "txt" "html" "dvi.gz" "pdf.gz" "ps.gz" "txt.gz" "html.gz"
+    "dvi.bz2" "pdf.bz2" "ps.bz2" "txt.bz2" "html.bz2")
+  "File extensions of documentation files.")
+
 (defcustom docTeX-default-extension "dtx"
   "*Default extension for docTeX files."
   :group 'TeX-file-extension
@@ -3482,23 +3492,6 @@
   :group 'TeX-file-extension
   :type '(repeat (string :format "%v")))
 
-(defcustom TeX-ignore-file 
"\\(^\\|[/\\]\\)\\(\\.\\|\\.\\.\\|RCS\\|SCCS\\|CVS\\|babel\\..*\\)$"
-  "Regular expression matching file names to ignore.
-
-These files or directories will not be considered when searching for
-TeX files in a directory."
-  :group 'TeX-parse
-  :type 'regexp)
-
-(defcustom TeX-file-recurse t
-  "*Whether to search TeX directories recursively.
-nil means do not recurse, a positive integer means go that far deep in the
-directory hierarchy, t means recurse indefinitely."
-  :group 'TeX-parse
-  :type '(choice (const :tag "On" t)
-                (const :tag "Off" nil)
-                (integer :tag "Depth" :value 1)))
-
 (defun TeX-match-extension (file &optional extensions)
   "Return non-nil if FILE has one of EXTENSIONS.
 
@@ -3541,6 +3534,23 @@
        (file-name-nondirectory strip)
       strip)))
 
+
+;;; File Searching
+
+(defun TeX-tree-roots ()
+  "Return a list of available TeX tree roots."
+  (let (list)
+    (dolist (dir (TeX-tree-expand '("$TEXMFHOME" "$TEXMFMAIN" "$TEXMFLOCAL"
+                                   "$TEXMFDIST") "latex"))
+      (when (file-readable-p dir)
+       (add-to-list 'list dir t)))
+    list))
+
+(defcustom TeX-tree-roots (TeX-tree-roots)
+  "List of all available TeX tree root directories."
+  :group 'TeX-file
+  :type '(repeat directory))
+
 (defcustom TeX-kpathsea-path-delimiter t
   "Path delimiter for kpathsea output.
 t means autodetect, nil means kpathsea is disabled."
@@ -3550,77 +3560,44 @@
                 (const :tag "Autodetect" t)
                 (const :tag "Off" nil)))
 
-(defcustom TeX-kpathsea-format-alist
-  '(("tex" "${TEXINPUTS.latex}" TeX-file-extensions)
-    ("sty" "${TEXINPUTS.latex}" '("sty"))
-    ("dvi" "${TEXDOCS}" '("dvi" "pdf" "ps" "txt" "html"
-                         "dvi.gz" "pdf.gz" "ps.gz" "txt.gz" "html.gz"
-                         "dvi.bz2" "pdf.bz2" "ps.bz2" "txt.bz2" "html.bz2"))
-    ("eps" "${TEXINPUTS}" LaTeX-includegraphics-extensions)
-    ("pdf" "${TEXINPUTS}" LaTeX-includegraphics-extensions)
-    ("png" "${TEXINPUTS}" LaTeX-includegraphics-extensions)
-    ("jpg" "${TEXINPUTS}" LaTeX-includegraphics-extensions)
-    ("jpeg" "${TEXINPUTS}" LaTeX-includegraphics-extensions)
-    ("bib" "$BIBINPUTS" BibTeX-file-extensions)
-    ("bst" "$BSTINPUTS" BibTeX-style-extensions))
-  "Formats to search for expansion using kpathsea.
-The key of the alist represents the name of the format.  The
-first element of the cdr of the alist is string to expand by the
-respective kpathsea program and the second element is a list of
-file extensions to match."
-  :group 'TeX-file
-  :type '(alist :key-type string :value-type (group string sexp)))
-
-;; FIXME: Despite the first parameter named `extensions',
-;; `TeX-search-files-kpathsea' basically treats this as a format
-;; specifier.  Only the first element in the respective list will be
-;; used to determine the search paths and file extensions with the
-;; help of `TeX-kpathsea-format-alist'.  Out of these differences
-;; arises a need to unify the behavior of `TeX-search-files' and
-;; `TeX-search-files-kpathsea' and their treatment of parameters.
-;; Additionally `TeX-search-files-kpathsea' should be made more
-;; general to work with other platforms and TeX systems as well.
-(defun TeX-search-files-kpathsea (extensions nodir strip)
-  "The kpathsea-enabled version of `TeX-search-files'.
-Except for DIRECTORIES (a kpathsea string), the arguments for
-EXTENSIONS, NODIR and STRIP are explained there."
+;; We keep this function in addition to `TeX-search-files' because it
+;; is faster.  Since it does not look further into subdirectories,
+;; this comes at the price of finding a smaller number of files.
+(defun TeX-search-files-kpathsea (var extensions scope nodir strip)
+  "Return a list of files in directories determined by expanding VAR.
+Only files which match EXTENSIONS are returned.  SCOPE defines
+the scope for the search and can be `local' or `global' besides
+nil.  If NODIR is non-nil, remove directory part.  If STRIP is
+non-nil, remove file extension."
   (and TeX-kpathsea-path-delimiter
        (catch 'no-kpathsea
-        (let* ((format-spec (assoc (car extensions)
-                                   TeX-kpathsea-format-alist))
-               (dirs (with-output-to-string
-                       (unless (zerop
-                                (call-process
-                                 "kpsewhich" nil (list standard-output nil)
-                                 nil
-                                 (concat
-                                  "-expand-path="
-                                  (nth 1 format-spec))))
+        (let* ((dirs (if (eq scope 'local)
+                         "."
+                       (with-output-to-string
+                         (unless (zerop (call-process
+                                         "kpsewhich" nil
+                                         (list standard-output nil) nil
+                                         (concat "-expand-path=" var)))
                         (if (eq TeX-kpathsea-path-delimiter t)
                             (throw 'no-kpathsea
                                    (setq TeX-kpathsea-path-delimiter nil))
-                          (error "kpsewhich error")))))
+                             (error "kpsewhich error"))))))
               result)
           (when (eq TeX-kpathsea-path-delimiter t)
             (setq TeX-kpathsea-path-delimiter
-                  (cond ((string-match ";" dirs)
-                         ";")
-                        ((string-match ":" dirs)
-                         ":"))))
+                  (if (string-match ";" dirs) ";" ":")))
           (unless TeX-kpathsea-path-delimiter
             (throw 'no-kpathsea nil))
-          (setq dirs (split-string dirs (concat "[\n\r"
+          (setq dirs (delete "" (split-string
+                                 dirs (concat "[\n\r"
                                                 TeX-kpathsea-path-delimiter
-                                                "]+")))
-          (setq extensions (concat "\\."
-                                   (regexp-opt (eval (nth 2 format-spec)) t)
-                                   "\\'"))
-          (setq result
-                (apply #'append
-                       (mapcar
-                        (lambda(x) (directory-files x
-                                                    (not nodir)
-                                                    extensions))
+                                              "]+"))))
+          (if (eq scope 'global)
+              (delete "." dirs))
+          (setq extensions (concat "\\." (regexp-opt extensions t) "\\'")
+                result (apply #'append (mapcar (lambda (x)
+                                                 (directory-files
+                                                  x (not nodir) extensions))
                         dirs)))
           (if strip
               (mapcar (lambda(x)
@@ -3637,13 +3614,10 @@
 If optional argument DIRECTORIES is set, search in those directories.
 Otherwise, search in all TeX macro directories.
 If optional argument EXTENSIONS is not set, use `TeX-file-extensions'"
-  (if (null extensions)
+  (when (null extensions)
       (setq extensions TeX-file-extensions))
-  (or (TeX-search-files-kpathsea extensions nodir strip)
-      (progn
-       (if (null directories)
-           (setq directories
-                 (cons "./" (append TeX-macro-private TeX-macro-global))))
+  (when (null directories)
+    (setq directories (cons "./" (append TeX-macro-private TeX-macro-global))))
        (let (match
              (TeX-file-recurse (cond ((symbolp TeX-file-recurse)
                                       TeX-file-recurse)
@@ -3668,15 +3642,89 @@
                                   (append match
                                           (TeX-search-files
                                            (list (file-name-as-directory file))
-                                           extensions
-                                           nodir strip)))))
+                                     extensions nodir strip)))))
                        ((TeX-match-extension file extensions)
-                        (setq match (cons (TeX-strip-extension file
-                                                               extensions
-                                                               nodir
-                                                               (not strip))
+                  (setq match (cons (TeX-strip-extension
+                                     file extensions nodir (not strip))
                                           match))))))))
-         match))))
+    match))
+
+;; The variables `TeX-macro-private' and `TeX-macro-global' are not
+;; used for specifying the directories because the number of
+;; directories to be searched should be limited as much as possible
+;; and the TeX-macro-* variables are just too broad for this.
+(defvar TeX-search-files-type-alist
+  '((texinputs "${TEXINPUTS}" ("tex/") TeX-file-extensions)
+    (docs "${TEXDOCS}" ("doc/") TeX-doc-extensions)
+    (graphics "${TEXINPUTS}" ("tex/") LaTeX-includegraphics-extensions)
+    (bibinputs "${BIBINPUTS}" ("bibtex/bib/") BibTeX-file-extensions)
+    (bstinputs "${BSTINPUTS}" ("bibtex/bst/") BibTeX-style-extensions))
+  "Alist of filetypes with locations and file extensions.
+Each element of the alist consists of a symbol expressing the
+filetype, a variable which can be expanded on kpathsea-based
+systems into the directories where files of the given type
+reside, a list of absolute directories, relative directories
+below the root of a TDS-compliant TeX tree or a list of variables
+with either type of directories as an alternative for
+non-kpathsea-based systems and a list of extensions to be matched
+upon a file search.  Note that the directories have to end with a
+directory separator.
+
+Each AUCTeX mode should set the variable buffer-locally with a
+more specific value.  See `LateX-search-files-type-alist' for an
+example.")
+
+(defun TeX-search-files-by-type (filetype &optional scope nodir strip)
+  "Return a list of files in TeX's search path with type FILETYPE.
+FILETYPE is a symbol used to choose the search paths and
+extensions.  See `TeX-search-file-type-alist' for supported
+symbols.
+
+The optional argument SCOPE sets the scope for the search.
+Besides nil the symbols `local' and `global' are accepted.
+`local' means to search in the current directory only, `global'
+in the global directories only and nil in both.
+
+If optional argument NODIR is non-nil, remove directory part.
+
+If optional argument STRIP is non-nil, remove file extension."
+  (let* ((spec (assq filetype TeX-search-files-type-alist))
+        (kpse-var (nth 1 spec))
+        (rawdirs (nth 2 spec))
+        (exts (nth 3 spec))
+        expdirs dirs local-files)
+    (setq exts (if (symbolp exts) (eval exts) exts))
+    (or (TeX-search-files-kpathsea kpse-var exts scope nodir strip)
+       (progn
+         (unless (eq scope 'global)
+           (setq local-files
+                 (let ((TeX-file-recurse nil))
+                   (TeX-search-files '("./") exts nodir strip))))
+         (if (eq scope 'local)
+             local-files
+           (if (null TeX-tree-roots)
+               (error "No TeX trees available; configure `TeX-tree-roots'")
+             ;; Expand variables.
+             (dolist (rawdir rawdirs)
+               (if (symbolp rawdir)
+                   (setq expdirs (append expdirs (eval rawdir)))
+                 (add-to-list 'expdirs rawdir t)))
+             (delete-dups expdirs)
+             ;; Assumption: Either all paths are absolute or all are relative.
+             (if (file-name-absolute-p (car expdirs))
+                 (setq dirs expdirs)
+               ;; Append relative TDS subdirs to all TeX tree roots.
+               (dolist (root TeX-tree-roots)
+                 (dolist (dir expdirs)
+                   (add-to-list 'dirs (concat (file-name-as-directory root)
+                                              dir) t)))))
+           (append local-files (TeX-search-files dirs exts nodir strip)))))))
+
+
+;;; Utilities
+;;
+;; Some of these functions has little to do with TeX, but nonetheless we
+;; should use the "TeX-" prefix to avoid name clashes.
 
 (defun TeX-car-string-lessp (s1 s2)
   "Compare the cars of S1 and S2 in lexicographic order.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]