[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
main 5ceda4ec: Make style/graphicx.el parse \graphicspath for searching
From: |
Ikumi Keita |
Subject: |
main 5ceda4ec: Make style/graphicx.el parse \graphicspath for searching |
Date: |
Tue, 15 Oct 2024 05:16:09 -0400 (EDT) |
branch: main
commit 5ceda4ec37913fd2b989b8011d23c6de4252a285
Author: Leo C. Stein <leo.stein@gmail.com>
Commit: Ikumi Keita <ikumi@ikumi.que.jp>
Make style/graphicx.el parse \graphicspath for searching
* style/graphicx.el (LaTeX-parse-graphicspath): New function.
(LaTeX-includegraphics-read-file-TeX): Use it.
* tex.el (TeX-search-files-kpathsea): Attach a new optional argument
`extra-dirs'.
(TeX-search-files-by-type): Accept optional argument `extra-dirs' to
pass it to `TeX-search-files-kpathsea'.
* NEWS.org (Added): Announce the new facility.
---
NEWS.org | 3 +++
style/graphicx.el | 23 +++++++++++++++++++++--
tex.el | 17 +++++++++++------
3 files changed, 35 insertions(+), 8 deletions(-)
diff --git a/NEWS.org b/NEWS.org
index 49dcc10e..6eddeb2f 100644
--- a/NEWS.org
+++ b/NEWS.org
@@ -17,6 +17,9 @@
- Add new support file =style/minted2.el= (=style/minted.el= is updated
to package v3.1.2).
+- Add preliminary support for parsing =\graphicspath= in
+ =style/graphicx.el=.
+
* [14.0.7] - 2024-10-05
** Added
diff --git a/style/graphicx.el b/style/graphicx.el
index e5410634..78cdff95 100644
--- a/style/graphicx.el
+++ b/style/graphicx.el
@@ -172,12 +172,30 @@ May be reset with `\\[universal-argument]
\\[TeX-normal-mode]'.")
;; Add the variable to `TeX-normal-mode-reset-list':
(add-to-list 'TeX-normal-mode-reset-list 'LaTeX-includegraphics-global-files)
+(defun LaTeX-parse-graphicspath ()
+ "Parse the current document for \\graphicspath commands.
+Return value is a list of paths."
+ (let ((results '())
+ (graphicspath-regex "\\\\graphicspath{\\({\\([^}]*\\)}\\)*}")
+ (single-path-regex "{\\([^{}]*\\)}"))
+ (save-excursion
+ (goto-char (point-min))
+ (while (re-search-forward graphicspath-regex nil t)
+ (let ((start-pos (match-beginning 0))
+ (end-pos (match-end 0)))
+ (save-excursion
+ (goto-char start-pos)
+ (while (re-search-forward single-path-regex end-pos t)
+ (push (match-string-no-properties 1) results)))))
+ (nreverse results))))
+
(defun LaTeX-includegraphics-read-file-TeX ()
"Read image file for \\includegraphics.
Offers all graphic files found in the TeX search path. See
`LaTeX-includegraphics-read-file' for more."
(let ((LaTeX-includegraphics-extensions
- (LaTeX-includegraphics-extensions-list)))
+ (LaTeX-includegraphics-extensions-list))
+ (extra-dirs (LaTeX-parse-graphicspath)))
(unless LaTeX-includegraphics-global-files
(message "Searching for graphic files...")
(setq LaTeX-includegraphics-global-files
@@ -189,7 +207,8 @@ Offers all graphic files found in the TeX search path. See
"Image file: "
(append
(TeX-search-files-by-type 'graphics 'local t
- LaTeX-includegraphics-strip-extension-flag)
+ LaTeX-includegraphics-strip-extension-flag
+ extra-dirs)
LaTeX-includegraphics-global-files)
nil nil nil)))
diff --git a/tex.el b/tex.el
index 44a0f04d..28aaed11 100644
--- a/tex.el
+++ b/tex.el
@@ -4678,15 +4678,18 @@ EXTENSIONS defaults to `TeX-file-extensions'."
;; 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)
+(defun TeX-search-files-kpathsea (var extensions scope nodir strip &optional
extra-dirs)
"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."
+non-nil, remove file extension.
+If SCOPE is `local' and the optional argument EXTRA-DIRS is passed, it
+is appended to the list of local directories to search. In `global'
+scope, EXTRA-DIRS does nothing."
(when TeX-kpathsea-path-delimiter
(let ((dirs (if (eq scope 'local)
- '("./")
+ (cons "./" extra-dirs)
(TeX-tree-expand (list var) nil)))
result)
(if (eq scope 'global)
@@ -4773,7 +4776,7 @@ 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)
+(defun TeX-search-files-by-type (filetype &optional scope nodir strip
extra-dirs)
"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-files-type-alist' for supported
@@ -4786,7 +4789,9 @@ 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."
+If optional argument STRIP is non-nil, remove file extension.
+
+The optional argument EXTRA-DIRS is passed to `TeX-search-files-kpathsea'."
(let* ((gc-cons-threshold 10000000)
(spec (assq filetype TeX-search-files-type-alist))
(kpse-var (nth 1 spec))
@@ -4794,7 +4799,7 @@ If optional argument STRIP is non-nil, remove file
extension."
(exts (nth 3 spec))
expdirs dirs local-files)
(setq exts (if (symbolp exts) (eval exts t) exts))
- (or (TeX-search-files-kpathsea kpse-var exts scope nodir strip)
+ (or (TeX-search-files-kpathsea kpse-var exts scope nodir strip extra-dirs)
(progn
(unless (eq scope 'global)
(setq local-files
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- main 5ceda4ec: Make style/graphicx.el parse \graphicspath for searching,
Ikumi Keita <=