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

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

[elpa] externals/engrave-faces 5b1f4369e9 3/3: LaTeX: allow for preamble


From: ELPA Syncer
Subject: [elpa] externals/engrave-faces 5b1f4369e9 3/3: LaTeX: allow for preamble of just cmds/colors
Date: Sun, 8 May 2022 03:57:35 -0400 (EDT)

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

    LaTeX: allow for preamble of just cmds/colors
---
 engrave-faces-latex.el | 83 ++++++++++++++++++++++++++++++++------------------
 1 file changed, 54 insertions(+), 29 deletions(-)

diff --git a/engrave-faces-latex.el b/engrave-faces-latex.el
index 093ded07cf..8e2662645f 100644
--- a/engrave-faces-latex.el
+++ b/engrave-faces-latex.el
@@ -27,44 +27,69 @@ When preset, short commands are generated for 
`engrave-faces-preset-styles'."
   :type 'string
   :group 'engrave-faces)
 
-(defun engrave-faces-latex-gen-preamble (&optional theme)
+(defun engrave-faces-latex-gen-preamble (&optional theme type)
   "Generate a preamble which provides short commands for the preset styles.
-See `engrave-faces-preset-styles' and `engrave-faces-latex-output-style'."
-  (let ((preset-style
+See `engrave-faces-preset-styles' and `engrave-faces-latex-output-style'.
+TYPE is passed to `engrave-faces-latex-gen-preamble-line', and when TYPE
+is set to colors, the strut definition is also ommited."
+  (let ((engrave-faces-current-preset-style
          (if theme
              (engrave-faces-get-theme theme)
            engrave-faces-current-preset-style)))
     (concat
-     (unless (cl-notany (lambda (s) (plist-get (cdr s) :background))
-                        preset-style)
+     (unless (eq type 'colors)
        (format "\\newcommand\\efstrut{%s}\n" 
engrave-faces-latex-colorbox-strut))
      (mapconcat
       (lambda (face-style)
-        (engrave-faces-latex-gen-preamble-line (car face-style) (cdr 
face-style)))
-      preset-style
+        (engrave-faces-latex-gen-preamble-line
+         (car face-style) (cdr face-style) type))
+      engrave-faces-current-preset-style
       "\n"))))
 
-(defun engrave-faces-latex-gen-preamble-line (face style)
-  "Generate a LaTeX preamble line for STYLE representing FACE."
-  (let ((short (plist-get style         :slug))
-        (fg    (plist-get style         :foreground))
-        (bg    (plist-get style         :background))
-        (st    (plist-get style         :strike-through))
-        (it    (eql (plist-get style    :slant) 'italic))
-        (bl    (member (plist-get style :weight) '(bold extra-bold))))
-    (concat (when fg (format "\\definecolor{EF%s}{HTML}{%s}\n" short 
(substring fg 1)))
-            (when bg (format "\\definecolor{Ef%s}{HTML}{%s}\n" short 
(substring bg 1)))
-            "\\newcommand{\\EF" short "}[1]{"
-            (when (and bg (not (eq face 'default)))
-              (concat "\\colorbox{Ef" short "}{\\efstrut{}"))
-            (when fg (concat "\\textcolor{EF" short "}{"))
-            (when st "\\sout{") (when bl "\\textbf{") (when it "\\textit{")
-            "#1}"
-            (make-string
-             (cl-count-if #'identity
-                          (list (and bg (not (eq face 'default))) fg st bl it))
-             ?})
-            " % " (symbol-name face))))
+(defun engrave-faces-latex-gen-preamble-line (face style &optional type)
+  "Generate a LaTeX preamble line for STYLE representing FACE.
+type can be set to either the symbol colors or definitions, in which case
+it limits the generate lines to only colors or definitions."
+  (let ((slug (plist-get style         :slug))
+        (fg   (plist-get style         :foreground))
+        (bg   (plist-get style         :background))
+        (st   (plist-get style         :strike-through))
+        (it   (eql (plist-get style    :slant) 'italic))
+        (bl   (member (plist-get style :weight) '(bold extra-bold)))
+        (defaultslug
+          (plist-get (alist-get 'default
+                                engrave-faces-current-preset-style)
+                     :slug)))
+    (let ((colors
+           (concat
+            (if fg
+                (format "\\definecolor{EF%s}{HTML}{%s}" slug (substring fg 1))
+              (when (eq type 'colors)
+                (format "\\colorlet{EF%s}{EF%s}" slug defaultslug)))
+            (when (or (and fg bg) (eq type 'colors))
+              "\n")
+            (if bg
+                (format "\\definecolor{Ef%s}{HTML}{%s}" slug (substring bg 1))
+              (when (eq type 'colors)
+                (format "\\colorlet{Ef%s}{Ef%s}" slug defaultslug)))))
+          (definitions
+            (concat
+             "\\newcommand{\\EF" slug "}[1]{"
+             (when (and bg (not (eq face 'default)))
+               (concat "\\colorbox{Ef" slug "}{\\efstrut{}"))
+             (when fg (concat "\\textcolor{EF" slug "}{"))
+             (when st "\\sout{") (when bl "\\textbf{") (when it "\\textit{")
+             "#1}"
+             (make-string
+              (cl-count-if #'identity
+                           (list (and bg (not (eq face 'default))) fg st bl 
it))
+              ?})
+             " % " (symbol-name face))))
+      (pcase type
+        ('colors colors)
+        ('definitions definitions)
+        ('nil (concat colors "\n" definitions))
+        (invalid (user-error "Invalid preamble line type `%s'." invalid))))))
 
 (defun engrave-faces-latex-face-apply (faces content)
   "Convert each (compatable) parameter of FACES to a LaTeX command apllied to 
CONTENT."
@@ -101,7 +126,7 @@ See `engrave-faces-preset-styles' and 
`engrave-faces-latex-output-style'."
   (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))
+         (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))



reply via email to

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