emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/engrave-faces 9f8dedd877 2/5: LaTeX: Add support for ma


From: ELPA Syncer
Subject: [elpa] externals/engrave-faces 9f8dedd877 2/5: LaTeX: Add support for mathescape
Date: Tue, 10 May 2022 12:57:31 -0400 (EDT)

branch: externals/engrave-faces
commit 9f8dedd87773ae5910252060999c8396d6c0af0b
Author: TEC <tec@tecosaur.com>
Commit: TEC <tec@tecosaur.com>

    LaTeX: Add support for mathescape
---
 engrave-faces-latex.el | 58 +++++++++++++++++++++++++++++++++++++++-----------
 1 file changed, 45 insertions(+), 13 deletions(-)

diff --git a/engrave-faces-latex.el b/engrave-faces-latex.el
index 093ded07cf..16c200e7ba 100644
--- a/engrave-faces-latex.el
+++ b/engrave-faces-latex.el
@@ -21,6 +21,14 @@ When preset, short commands are generated for 
`engrave-faces-preset-styles'."
   :type '(choice nil preset)
   :group 'engrave-faces)
 
+(defcustom engrave-faces-latex-mathescape nil
+  "Whether $ characters in comments should be allowed.
+This is intended to be used with fvextra's mathescape option, and
+only applies to text set with `font-lock-comment-face' including
+at least two $s."
+  :type 'boolean
+  :group 'engrave-faces)
+
 (defcustom engrave-faces-latex-colorbox-strut
   "\\vrule height 2.1ex depth 0.8ex width 0pt"
   "LaTeX code which sets the height and depth for any colorboxes."
@@ -81,32 +89,53 @@ See `engrave-faces-preset-styles' and 
`engrave-faces-latex-output-style'."
        content
        (when bg "}") (when fg "}") (when st "}") (when bl "}") (when it 
"}")))))
 
+(defconst engrave-faces-latex--char-replacements
+  '(("\\" . "\\char92{}")
+    ("^" . "\\char94{}")
+    ("~" . "\\char126{}")))
+
+(defun engrave-faces-latex--protect-content (content)
+  (replace-regexp-in-string
+   "[\\{}$%&_#]" "\\\\\\&"
+   (replace-regexp-in-string
+    (regexp-opt (mapcar #'car engrave-faces-latex--char-replacements))
+    (lambda (char)
+      (cdr (assoc char engrave-faces-latex--char-replacements)))
+    content
+    nil t)))
+
+(defun engrave-faces-latex--protect-content-mathescape (content)
+  (replace-regexp-in-string
+   "\\`\\([^$]*\\)\\(\\$.+\\$\\)\\([^$]*\\)\\'"
+   (lambda (full-match)
+     (concat (engrave-faces-latex--protect-content (match-string 1 full-match))
+             (match-string 2 full-match)
+             (engrave-faces-latex--protect-content (match-string 3 
full-match))))
+   content
+   nil t))
+
 (defun engrave-faces-latex-face-mapper (faces content)
   "Create a LaTeX representation of CONTENT With FACES applied."
-  (let ((protected-content (replace-regexp-in-string "[\\{}$%&_#]" "\\\\\\&" 
content))
-        (style (engrave-faces-preset-style faces)))
+  (let* ((style (engrave-faces-preset-style faces))
+         (protected-content
+          (funcall
+           (if (and engrave-faces-latex-mathescape
+                    (eq 'font-lock-comment-face (car style)))
+               #'engrave-faces-latex--protect-content-mathescape
+             #'engrave-faces-latex--protect-content)
+           content)))
     (if (string-match-p "\\`[\n[:space:]]+\\'" content)
         protected-content
       (if (and style (eq engrave-faces-latex-output-style 'preset))
           (concat "\\EF" (plist-get (cdr style) :slug) "{" protected-content 
"}")
         (engrave-faces-latex-face-apply faces protected-content)))))
 
-(defvar engrave-faces-latex-char-replacements
-  '(("\\\\" . "\\\\char92{}")
-    ("^" . "\\\\char94{}")
-    ("~" . "\\\\char126{}")))
-
-(defun engrave-faces-latex-post-processing ()
   (goto-char (point-min))
   (insert
    (let ((style (cdr (assoc 'default engrave-faces-preset-styles))))
      (if (eq engrave-faces-latex-output-style 'preset)
        (format "\\color{EF%s}" (plist-get style :slug))
        (concat "\\color[HTML]{" (substring (plist-get style :foreground) 1) 
"}"))))
-  (dolist (find-sub engrave-faces-latex-char-replacements)
-    (goto-char (point-min))
-    (while (search-forward (car find-sub) nil t)
-      (replace-match (cdr find-sub))))
   (goto-char (point-min))
   (while (re-search-forward "\n\\([[:space:]]*\\)\\(}+\\)" nil t)
     (replace-match "\\2\n\\1")))
@@ -126,7 +155,10 @@ See `engrave-faces-preset-styles' and 
`engrave-faces-latex-output-style'."
           "
 \\begin{document}
 \\setlength{\\fboxsep}{0pt}
-\\begin{Verbatim}[breaklines=true, commandchars=\\\\\\{\\}]\n")
+\\begin{Verbatim}[breaklines=true, commandchars=\\\\\\{\\}"
+          (when engrave-faces-latex-mathescape
+            ", mathescape")
+          "]\n")
   (goto-char (point-max))
   (insert "\\end{Verbatim}
 \\end{document}"))



reply via email to

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