\documentclass{article}

\usepackage{xcolor}
\usepackage{fvextra}
\usepackage[margin=1.5cm]{geometry}
\usepackage{sourcecodepro}
\pagestype{empty}

\definecolor{EFD}{HTML}{383a42}
\newcommand{\EFD}[1]{\textcolor{EFD}{#1}} % default
\definecolor{EFk}{HTML}{e45649}
\newcommand{\EFk}[1]{\textcolor{EFk}{#1}} % font-lock-keyword-face
\definecolor{EFd}{HTML}{84888b}
\newcommand{\EFd}[1]{\textcolor{EFd}{\textit{#1}}} % font-lock-doc-face
\definecolor{EFt}{HTML}{986801}
\newcommand{\EFt}[1]{\textcolor{EFt}{#1}} % font-lock-type-face
\definecolor{EFs}{HTML}{50a14f}
\newcommand{\EFs}[1]{\textcolor{EFs}{#1}} % font-lock-string-face
\definecolor{EFw}{HTML}{986801}
\newcommand{\EFw}[1]{\textcolor{EFw}{#1}} % font-lock-warning-face
\definecolor{EFb}{HTML}{a626a4}
\newcommand{\EFb}[1]{\textcolor{EFb}{#1}} % font-lock-builtin-face
\definecolor{EFct}{HTML}{9ca0a4}
\newcommand{\EFct}[1]{\textcolor{EFct}{#1}} % font-lock-comment-face
\definecolor{EFc}{HTML}{b751b6}
\newcommand{\EFc}[1]{\textcolor{EFc}{#1}} % font-lock-constant-face
\definecolor{EFpp}{HTML}{4078f2}
\newcommand{\EFpp}[1]{\textcolor{EFpp}{\textbf{#1}}} % font-lock-preprocessor-face
\definecolor{EFnc}{HTML}{4078f2}
\newcommand{\EFnc}[1]{\textcolor{EFnc}{\textbf{#1}}} % font-lock-negation-char-face
\definecolor{EFv}{HTML}{6a1868}
\newcommand{\EFv}[1]{\textcolor{EFv}{#1}} % font-lock-variable-name-face
\definecolor{EFf}{HTML}{a626a4}
\newcommand{\EFf}[1]{\textcolor{EFf}{#1}} % font-lock-function-name-face
\definecolor{EFcd}{HTML}{9ca0a4}
\newcommand{\EFcd}[1]{\textcolor{EFcd}{#1}} % font-lock-comment-delimiter-face
\definecolor{EFrc}{HTML}{4078f2}
\newcommand{\EFrc}[1]{\textcolor{EFrc}{\textbf{#1}}} % font-lock-regexp-grouping-construct
\definecolor{EFrb}{HTML}{4078f2}
\newcommand{\EFrb}[1]{\textcolor{EFrb}{\textbf{#1}}} % font-lock-regexp-grouping-backslash
\newcommand{\EFob}[1]{#1} % org-block
\definecolor{EFhn}{HTML}{da8548}
\newcommand{\EFhn}[1]{\textcolor{EFhn}{\textbf{#1}}} % highlight-numbers-number
\definecolor{EFhq}{HTML}{4078f2}
\newcommand{\EFhq}[1]{\textcolor{EFhq}{#1}} % highlight-quoted-quote
\definecolor{EFhs}{HTML}{986801}
\newcommand{\EFhs}[1]{\textcolor{EFhs}{#1}} % highlight-quoted-symbol
\definecolor{EFrdi}{HTML}{4078f2}
\newcommand{\EFrdi}[1]{\textcolor{EFrdi}{#1}} % rainbow-delimiters-depth-1-face
\definecolor{EFrdii}{HTML}{a626a4}
\newcommand{\EFrdii}[1]{\textcolor{EFrdii}{#1}} % rainbow-delimiters-depth-2-face
\definecolor{EFrdiii}{HTML}{50a14f}
\newcommand{\EFrdiii}[1]{\textcolor{EFrdiii}{#1}} % rainbow-delimiters-depth-3-face
\definecolor{EFrdiv}{HTML}{da8548}
\newcommand{\EFrdiv}[1]{\textcolor{EFrdiv}{#1}} % rainbow-delimiters-depth-4-face
\definecolor{EFrdv}{HTML}{b751b6}
\newcommand{\EFrdv}[1]{\textcolor{EFrdv}{#1}} % rainbow-delimiters-depth-5-face
\definecolor{EFrdvi}{HTML}{986801}
\newcommand{\EFrdvi}[1]{\textcolor{EFrdvi}{#1}} % rainbow-delimiters-depth-6-face
\definecolor{EFrdvii}{HTML}{4db5bd}
\newcommand{\EFrdvii}[1]{\textcolor{EFrdvii}{#1}} % rainbow-delimiters-depth-7-face
\definecolor{EFrdiix}{HTML}{80a880}
\newcommand{\EFrdiix}[1]{\textcolor{EFrdiix}{#1}} % rainbow-delimiters-depth-8-face
\definecolor{EFrdix}{HTML}{887070}
\newcommand{\EFrdix}[1]{\textcolor{EFrdix}{#1}} % rainbow-delimiters-depth-9-face
\begin{document}

\begin{Verbatim}[breaklines=true, commandchars=\\\{\}]
\color[HTML]{383a42}\EFcd{;;; }\EFct{engrave-faces.el --- Convert font-lock faces to other formats -*- lexical-binding: t; -*-}

\EFcd{;; }\EFct{Copyright (C) 2021 TEC}

\EFcd{;; }\EFct{Author: TEC <https://github/tecosaur>}
\EFcd{;; }\EFct{Maintainer: TEC <tec@tecosaur.com>}
\EFcd{;; }\EFct{Created: January 18, 2021}
\EFcd{;; }\EFct{Modified: July 10, 2021}
\EFcd{;; }\EFct{Version: 0.1.0}
\EFcd{;; }\EFct{Keywords: faces}
\EFcd{;; }\EFct{Homepage: https://github.com/tecosaur/engrave-faces}
\EFcd{;; }\EFct{Package-Requires: ((emacs "27.1"))}

\EFcd{;;; }\EFct{License:}

\EFcd{;; }\EFct{This file is part of engrave-faces, which is not part of GNU Emacs.}
\EFcd{;;}
\EFcd{;; }\EFct{engrave-faces is free software: you can redistribute it and/or modify}
\EFcd{;; }\EFct{it under the terms of the GNU General Public License as published by}
\EFcd{;; }\EFct{the Free Software Foundation, either version 3 of the License, or}
\EFcd{;; }\EFct{(at your option) any later version.}
\EFcd{;;}
\EFcd{;; }\EFct{engrave-faces is distributed in the hope that it will be useful,}
\EFcd{;; }\EFct{but WITHOUT ANY WARRANTY; without even the implied warranty of}
\EFcd{;; }\EFct{MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the}
\EFcd{;; }\EFct{GNU General Public License for more details.}
\EFcd{;;}
\EFcd{;; }\EFct{You should have received a copy of the GNU General Public License}
\EFcd{;; }\EFct{along with engrave-faces.  If not, see <https://www.gnu.org/licenses/>.}
\EFcd{;;}
\EFcd{;; }\EFct{SPDX-License-Identifier: GPL-3.0-or-later}

\EFcd{;;; }\EFct{Commentary:}

\EFcd{;;  }\EFct{Convert font-lock faces to other formats.}

\EFcd{;;; }\EFct{Code:}

\textcolor[HTML]{4078f2}{(}\EFc{require} \EFhq{'}\EFc{map}\textcolor[HTML]{4078f2}{)}

\EFcd{;;;}\EFct{\#\#\#}\textcolor[HTML]{986801}{autoload}
\textcolor[HTML]{4078f2}{(}\EFk{defvar} \EFv{engrave-faces--backends} nil\textcolor[HTML]{4078f2}{)}

\EFcd{;;;}\EFct{\#\#\#}\textcolor[HTML]{986801}{autoload}
\textcolor[HTML]{4078f2}{(}\EFk{defmacro} \EFf{engrave-faces-define-backend} \textcolor[HTML]{a626a4}{(}name extension face-transformer \EFt{\&optional} standalone-transformer view-setup\textcolor[HTML]{a626a4}{)}
  \EFhq{`}\textcolor[HTML]{a626a4}{(}\EFk{progn} \textcolor[HTML]{50a14f}{(}\EFc{add-to-list} \EFhq{'}\EFv{engrave-faces--backends}
                       \textcolor[HTML]{da8548}{(}\EFc{list} ,name \EFb{:face-transformer} ,face-transformer \EFb{:extension} ,extension\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
          \textcolor[HTML]{50a14f}{(}\EFk{defun} ,\textcolor[HTML]{da8548}{(}\EFc{intern} \textcolor[HTML]{4078f2}{(}\EFc{concat} \EFs{"engrave-faces-"} name \EFs{"-buffer"}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)} \textcolor[HTML]{da8548}{(}\EFt{\&optional} switch-to-result\textcolor[HTML]{da8548}{)}
            ,\textcolor[HTML]{da8548}{(}\EFc{concat} \EFs{"Convert buffer to "} name \EFs{" formatting."}\textcolor[HTML]{da8548}{)}
            \textcolor[HTML]{da8548}{(}\EFk{interactive} \EFhq{'}\textcolor[HTML]{4078f2}{(}t\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
            \textcolor[HTML]{da8548}{(}\EFk{let} \textcolor[HTML]{4078f2}{(}\textcolor[HTML]{a626a4}{(}buf \textcolor[HTML]{50a14f}{(}\EFf{engrave-faces-buffer} ,name\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
              \textcolor[HTML]{4078f2}{(}\EFk{when} switch-to-result
                \textcolor[HTML]{a626a4}{(}\EFc{switch-to-buffer} buf\textcolor[HTML]{a626a4}{)}
                ,\textcolor[HTML]{a626a4}{(}\EFk{when} view-setup \EFhq{`}\textcolor[HTML]{50a14f}{(}funcall ,view-setup\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
              buf\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
          ,\textcolor[HTML]{50a14f}{(}\EFk{when} standalone-transformer
             \EFhq{`}\textcolor[HTML]{da8548}{(}\EFk{defun} ,\textcolor[HTML]{4078f2}{(}\EFc{intern} \textcolor[HTML]{a626a4}{(}\EFc{concat} \EFs{"engrave-faces-"} name \EFs{"-buffer-standalone"}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)} \textcolor[HTML]{4078f2}{(}\EFt{\&optional} switch-to-result\textcolor[HTML]{4078f2}{)}
                \textcolor[HTML]{4078f2}{(}\EFk{interactive} \EFhq{'}\textcolor[HTML]{a626a4}{(}t\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
                ,\textcolor[HTML]{4078f2}{(}\EFc{concat} \EFs{"Export the current buffer to a standalone "} name \EFs{" buffer."}\textcolor[HTML]{4078f2}{)}
                \textcolor[HTML]{4078f2}{(}\EFk{let} \textcolor[HTML]{a626a4}{(}\textcolor[HTML]{50a14f}{(}buf \textcolor[HTML]{da8548}{(}\EFf{engrave-faces-buffer} ,name\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
                  \textcolor[HTML]{a626a4}{(}\EFk{with-current-buffer} buf
                    \textcolor[HTML]{50a14f}{(}\EFc{funcall} ,standalone-transformer\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
                  \textcolor[HTML]{a626a4}{(}\EFk{when} switch-to-result
                    \textcolor[HTML]{50a14f}{(}\EFc{switch-to-buffer} buf\textcolor[HTML]{50a14f}{)}
                    ,\textcolor[HTML]{50a14f}{(}\EFk{when} view-setup \EFhq{`}\textcolor[HTML]{da8548}{(}funcall ,view-setup\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
                  buf\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
          \textcolor[HTML]{50a14f}{(}\EFk{defvar} ,\textcolor[HTML]{da8548}{(}\EFc{intern} \textcolor[HTML]{4078f2}{(}\EFc{concat} \EFs{"engrave-faces-"} name \EFs{"-before-hook"}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)} nil\textcolor[HTML]{50a14f}{)}
          \textcolor[HTML]{50a14f}{(}\EFk{defvar} ,\textcolor[HTML]{da8548}{(}\EFc{intern} \textcolor[HTML]{4078f2}{(}\EFc{concat} \EFs{"engrave-faces-"} name \EFs{"-after-hook"}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)} nil\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defgroup} \EFt{engrave-faces} nil
  \EFd{"Export buffers with font-lock information to other formats."}
  \EFb{:group} \EFhq{'}\EFhs{hypermedia}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defcustom} \EFv{engrave-faces-attributes-of-interest}
  \EFhq{'}\textcolor[HTML]{a626a4}{(}\EFb{:foreground} \EFb{:background} \EFb{:slant} \EFb{:weight} \EFb{:height} \EFb{:strike-through}\textcolor[HTML]{a626a4}{)}
  \EFd{"Attributes which sould be paid attention to."}
  \EFb{:type} \EFhq{'}\textcolor[HTML]{a626a4}{(}repeat symbol\textcolor[HTML]{a626a4}{)}
  \EFb{:group} \EFhq{'}\EFhs{engrave-faces}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defcustom} \EFv{engrave-faces-before-hook} nil
  \EFd{"Hook run before engraving a buffer.
The hook functions are run in the source buffer (not the resulting buffer)."}
  \EFb{:type} \EFhq{'}\EFhs{hook}
  \EFb{:group} \EFhq{'}\EFhs{engrave-faces}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defcustom} \EFv{engrave-faces-after-hook} nil
  \EFd{"Hook run after engraving a buffer.
Unlike `}\textcolor[HTML]{b751b6}{\textit{engrave-faces-before-hook}}\EFd{', these functions are run in the generated
buffer.  You may use them to modify the outlook of the final output."}
  \EFb{:type} \EFhq{'}\EFhs{hook}
  \EFb{:group} \EFhq{'}\EFhs{engrave-faces}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-buffer} \textcolor[HTML]{a626a4}{(}backend\textcolor[HTML]{a626a4}{)}
  \EFd{"Export the current buffer with BACKEND and return the created buffer."}
  \textcolor[HTML]{a626a4}{(}\EFk{save-excursion}
    \EFcd{;; }\EFct{Protect against the hook changing the current buffer.}
    \textcolor[HTML]{50a14f}{(}\EFk{save-excursion}
      \textcolor[HTML]{da8548}{(}\EFc{run-hooks} \EFhq{'}\EFv{engrave-faces-before-hook}\textcolor[HTML]{da8548}{)}
      \textcolor[HTML]{da8548}{(}\EFc{run-hooks} \textcolor[HTML]{4078f2}{(}\EFc{intern} \textcolor[HTML]{a626a4}{(}\EFc{concat} \EFs{"engrave-faces-"} backend \EFs{"-before-hook"}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    \EFcd{;; }\EFct{Convince font-lock support modes to fontify the entire buffer}
    \EFcd{;; }\EFct{in advance.}
    \textcolor[HTML]{50a14f}{(}\EFk{when} \textcolor[HTML]{da8548}{(}\EFk{and} \textcolor[HTML]{4078f2}{(}\EFc{boundp} \EFhq{'}\EFv{jit-lock-mode}\textcolor[HTML]{4078f2}{)}
               \textcolor[HTML]{4078f2}{(}\EFc{symbol-value} \EFhq{'}\EFv{jit-lock-mode}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
      \textcolor[HTML]{da8548}{(}\EFc{jit-lock-fontify-now} \textcolor[HTML]{4078f2}{(}\EFc{point-min}\textcolor[HTML]{4078f2}{)} \textcolor[HTML]{4078f2}{(}\EFc{point-max}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFc{font-lock-ensure}\textcolor[HTML]{50a14f}{)}

    \EFcd{;; }\EFct{It's important that the new buffer inherits default-directory}
    \EFcd{;; }\EFct{from the current buffer.}
    \textcolor[HTML]{50a14f}{(}\EFk{let} \textcolor[HTML]{da8548}{(}\textcolor[HTML]{4078f2}{(}engraved-buf \textcolor[HTML]{a626a4}{(}\EFc{generate-new-buffer} \textcolor[HTML]{50a14f}{(}\EFk{if} \textcolor[HTML]{da8548}{(}\EFv{buffer-file-name}\textcolor[HTML]{da8548}{)}
                                                 \textcolor[HTML]{da8548}{(}\EFc{concat} \textcolor[HTML]{4078f2}{(}\EFc{file-name-nondirectory} \textcolor[HTML]{a626a4}{(}\EFv{buffer-file-name}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
                                                         \textcolor[HTML]{4078f2}{(}\EFc{plist-get} \textcolor[HTML]{a626a4}{(}\EFc{cdr} \textcolor[HTML]{50a14f}{(}\EFc{assoc} backend \EFv{engrave-faces--backends}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)} \EFb{:extension}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
                                               \textcolor[HTML]{da8548}{(}\EFc{concat} \EFs{"*"} backend \EFs{"*"}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
          \textcolor[HTML]{4078f2}{(}face-transformer \textcolor[HTML]{a626a4}{(}\EFc{plist-get} \textcolor[HTML]{50a14f}{(}\EFc{cdr} \textcolor[HTML]{da8548}{(}\EFc{assoc} backend \EFv{engrave-faces--backends}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)} \EFb{:face-transformer}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
          \textcolor[HTML]{4078f2}{(}completed nil\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
      \textcolor[HTML]{da8548}{(}\EFk{unwind-protect}
          \textcolor[HTML]{4078f2}{(}\EFk{let} \textcolor[HTML]{a626a4}{(}next-change text\textcolor[HTML]{a626a4}{)}
            \EFcd{;; }\EFct{This loop traverses and reads the source buffer, appending the}
            \EFcd{;; }\EFct{resulting text to the export buffer. This method is fast because:}
            \EFcd{;; }\EFct{1) it doesn't require examining the text properties char by char}
            \EFcd{;; }\EFct{(engrave-faces-next-face-change is used to move between runs with}
            \EFcd{;; }\EFct{the same face), and 2) it doesn't require frequent buffer}
            \EFcd{;; }\EFct{switches, which are slow because they rebind all buffer-local}
            \EFcd{;; }\EFct{vars.}
            \textcolor[HTML]{a626a4}{(}\EFc{goto-char} \textcolor[HTML]{50a14f}{(}\EFc{point-min}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
            \textcolor[HTML]{a626a4}{(}\EFk{while} \textcolor[HTML]{50a14f}{(}\EFc{not} \textcolor[HTML]{da8548}{(}\EFc{eobp}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
              \textcolor[HTML]{50a14f}{(}\EFk{setq} next-change \textcolor[HTML]{da8548}{(}\EFf{engrave-faces-next-face-change} \textcolor[HTML]{4078f2}{(}\EFc{point}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
              \textcolor[HTML]{50a14f}{(}\EFk{setq} text \textcolor[HTML]{da8548}{(}\EFc{buffer-substring-no-properties} \textcolor[HTML]{4078f2}{(}\EFc{point}\textcolor[HTML]{4078f2}{)} next-change\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
              \EFcd{;; }\EFct{Don't bother writing anything if there's no text (this}
              \EFcd{;; }\EFct{happens in invisible regions).}
              \textcolor[HTML]{50a14f}{(}\EFk{when} \textcolor[HTML]{da8548}{(}\EFc{>} \textcolor[HTML]{4078f2}{(}\EFc{length} text\textcolor[HTML]{4078f2}{)} \EFhn{0}\textcolor[HTML]{da8548}{)}
                \textcolor[HTML]{da8548}{(}\EFc{princ} \textcolor[HTML]{4078f2}{(}\EFc{funcall} face-transformer
                                \textcolor[HTML]{a626a4}{(}\EFk{let} \textcolor[HTML]{50a14f}{(}\textcolor[HTML]{da8548}{(}prop \textcolor[HTML]{4078f2}{(}\EFc{get-text-property} \textcolor[HTML]{a626a4}{(}\EFc{point}\textcolor[HTML]{a626a4}{)} \EFhq{'}\EFhs{face}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
                                  \textcolor[HTML]{50a14f}{(}\EFk{cond}
                                   \textcolor[HTML]{da8548}{(}\textcolor[HTML]{4078f2}{(}\EFc{null} prop\textcolor[HTML]{4078f2}{)} \EFhq{'}\EFhs{default}\textcolor[HTML]{da8548}{)}
                                   \textcolor[HTML]{da8548}{(}\textcolor[HTML]{4078f2}{(}\EFk{and} \textcolor[HTML]{a626a4}{(}\EFc{listp} prop\textcolor[HTML]{a626a4}{)}
                                         \textcolor[HTML]{a626a4}{(}\EFc{eq} \textcolor[HTML]{50a14f}{(}\EFc{car} prop\textcolor[HTML]{50a14f}{)} \EFhq{'}\EFhs{quote}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)} \textcolor[HTML]{4078f2}{(}\textcolor[HTML]{986801}{eval}\textcolor[HTML]{986801}{ prop}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
                                   \textcolor[HTML]{da8548}{(}t prop\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
                                text\textcolor[HTML]{4078f2}{)}
                       engraved-buf\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
              \textcolor[HTML]{50a14f}{(}\EFc{goto-char} next-change\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
        \textcolor[HTML]{4078f2}{(}\EFk{setq} completed t\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
      \textcolor[HTML]{da8548}{(}\EFk{if} \textcolor[HTML]{4078f2}{(}\EFc{not} completed\textcolor[HTML]{4078f2}{)}
          \textcolor[HTML]{4078f2}{(}\EFc{kill-buffer} engraved-buf\textcolor[HTML]{4078f2}{)}
        \textcolor[HTML]{4078f2}{(}\EFk{with-current-buffer} engraved-buf
          \textcolor[HTML]{a626a4}{(}\EFc{run-hooks} \EFhq{'}\EFv{engrave-faces-after-hook}\textcolor[HTML]{a626a4}{)}
          \textcolor[HTML]{a626a4}{(}\EFc{run-hooks} \textcolor[HTML]{50a14f}{(}\EFc{intern} \textcolor[HTML]{da8548}{(}\EFc{concat} \EFs{"engrave-faces-"} backend \EFs{"-after-hook"}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
        engraved-buf\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-merge-attributes} \textcolor[HTML]{a626a4}{(}faces \EFt{\&optional} attributes\textcolor[HTML]{a626a4}{)}
  \EFd{"Find the final ATTRIBUTES for text with FACES."}
  \textcolor[HTML]{a626a4}{(}\EFk{setq} faces \textcolor[HTML]{50a14f}{(}\EFf{engrave-faces-explicit-inheritance} \textcolor[HTML]{da8548}{(}\EFk{if} \textcolor[HTML]{4078f2}{(}\EFc{listp} faces\textcolor[HTML]{4078f2}{)} faces \textcolor[HTML]{4078f2}{(}\EFc{list} faces\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
  \textcolor[HTML]{a626a4}{(}\EFc{mapcan} \textcolor[HTML]{50a14f}{(}\EFk{lambda} \textcolor[HTML]{da8548}{(}attr\textcolor[HTML]{da8548}{)}
            \textcolor[HTML]{da8548}{(}\EFc{list} attr \textcolor[HTML]{4078f2}{(}\EFc{car} \textcolor[HTML]{a626a4}{(}\EFf{engrave-faces-attribute-values} faces attr\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
          \textcolor[HTML]{50a14f}{(}\EFk{or} attributes \EFv{engrave-faces-attributes-of-interest}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-explicit-inheritance} \textcolor[HTML]{a626a4}{(}faces\textcolor[HTML]{a626a4}{)}
  \EFd{"Expand :inherit for each face in FACES.
I.e. ([facea :inherit faceb] facec) results in (facea faceb facec)"}
  \textcolor[HTML]{a626a4}{(}\EFc{delq} nil
        \textcolor[HTML]{50a14f}{(}\EFc{mapcan}
         \textcolor[HTML]{da8548}{(}\EFk{lambda} \textcolor[HTML]{4078f2}{(}face\textcolor[HTML]{4078f2}{)}
           \textcolor[HTML]{4078f2}{(}\EFk{if} \textcolor[HTML]{a626a4}{(}\EFc{listp} face\textcolor[HTML]{a626a4}{)}
               \textcolor[HTML]{a626a4}{(}\EFk{let} \textcolor[HTML]{50a14f}{(}\textcolor[HTML]{da8548}{(}inherit \textcolor[HTML]{4078f2}{(}\EFc{plist-get} face \EFb{:inherit}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
                 \textcolor[HTML]{50a14f}{(}\EFc{cons} \textcolor[HTML]{da8548}{(}\EFf{map-delete} face \EFb{:inherit}\textcolor[HTML]{da8548}{)}
                       \textcolor[HTML]{da8548}{(}\EFf{engrave-faces-explicit-inheritance} inherit\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
             \textcolor[HTML]{a626a4}{(}\EFc{cons} face
                   \textcolor[HTML]{50a14f}{(}\EFk{let} \textcolor[HTML]{da8548}{(}\textcolor[HTML]{4078f2}{(}inherit \textcolor[HTML]{a626a4}{(}\EFc{face-attribute} face \EFb{:inherit} nil nil\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
                     \textcolor[HTML]{da8548}{(}\EFk{when} \textcolor[HTML]{4078f2}{(}\EFk{and} inherit \textcolor[HTML]{a626a4}{(}\EFc{not} \textcolor[HTML]{50a14f}{(}\EFc{eq} inherit \EFhq{'}\EFhs{unspecified}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
                       \textcolor[HTML]{4078f2}{(}\EFf{engrave-faces-explicit-inheritance} inherit\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
         \textcolor[HTML]{da8548}{(}\EFk{if} \textcolor[HTML]{4078f2}{(}\EFc{listp} faces\textcolor[HTML]{4078f2}{)} faces \textcolor[HTML]{4078f2}{(}\EFc{list} faces\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-attribute-values} \textcolor[HTML]{a626a4}{(}faces attribute\textcolor[HTML]{a626a4}{)}
  \EFd{"Fetch all specified instances of ATTRIBUTE for FACES, ignoring inheritence.
To consider inheritence, use `}\textcolor[HTML]{b751b6}{\textit{engrave-faces-explicit-inheritance}}\EFd{' first."}
  \textcolor[HTML]{a626a4}{(}\EFc{delq} nil \textcolor[HTML]{50a14f}{(}\EFc{delq} \EFhq{'}\EFhs{unspecified}
                  \textcolor[HTML]{da8548}{(}\EFc{mapcar}
                   \textcolor[HTML]{4078f2}{(}\EFk{lambda} \textcolor[HTML]{a626a4}{(}face\textcolor[HTML]{a626a4}{)}
                     \textcolor[HTML]{a626a4}{(}\EFk{or} \textcolor[HTML]{50a14f}{(}\EFc{plist-get} \textcolor[HTML]{da8548}{(}\EFc{cdr} \textcolor[HTML]{4078f2}{(}\EFc{assoc} face \EFv{engrave-faces-preset-styles}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)} attribute\textcolor[HTML]{50a14f}{)}
                         \textcolor[HTML]{50a14f}{(}\EFk{cond}
                          \textcolor[HTML]{da8548}{(}\textcolor[HTML]{4078f2}{(}\EFc{symbolp} face\textcolor[HTML]{4078f2}{)} \textcolor[HTML]{4078f2}{(}\EFc{face-attribute} face attribute nil nil\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
                          \textcolor[HTML]{da8548}{(}\textcolor[HTML]{4078f2}{(}\EFc{listp} face\textcolor[HTML]{4078f2}{)} \textcolor[HTML]{4078f2}{(}\EFc{plist-get} face attribute\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
                   \textcolor[HTML]{4078f2}{(}\EFc{delq} \EFhq{'}\EFhs{default} \textcolor[HTML]{a626a4}{(}\EFk{if} \textcolor[HTML]{50a14f}{(}\EFc{listp} faces\textcolor[HTML]{50a14f}{)} faces \textcolor[HTML]{50a14f}{(}\EFc{list} faces\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-next-face-change} \textcolor[HTML]{a626a4}{(}pos \EFt{\&optional} limit\textcolor[HTML]{a626a4}{)}
  \EFd{"Find the next face change from POS up to LIMIT.

This function is lifted from htmlize."}
  \EFcd{;; }\EFct{(engrave-faces-next-change pos 'face limit) would skip over entire}
  \EFcd{;; }\EFct{overlays that specify the `}\textcolor[HTML]{b751b6}{face}\EFct{' property, even when they}
  \EFcd{;; }\EFct{contain smaller text properties that also specify `}\textcolor[HTML]{b751b6}{face}\EFct{'.}
  \EFcd{;; }\EFct{Emacs display engine merges those faces, and so must we.}
  \textcolor[HTML]{a626a4}{(}\EFk{or} limit
      \textcolor[HTML]{50a14f}{(}\EFk{setq} limit \textcolor[HTML]{da8548}{(}\EFc{point-max}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
  \textcolor[HTML]{a626a4}{(}\EFk{let} \textcolor[HTML]{50a14f}{(}\textcolor[HTML]{da8548}{(}next-prop \textcolor[HTML]{4078f2}{(}\EFc{next-single-property-change} pos \EFhq{'}\EFhs{face} nil limit\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
        \textcolor[HTML]{da8548}{(}overlay-faces \textcolor[HTML]{4078f2}{(}\EFf{engrave-faces-overlay-faces-at} pos\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFk{while} \textcolor[HTML]{da8548}{(}\EFk{progn}
             \textcolor[HTML]{4078f2}{(}\EFk{setq} pos \textcolor[HTML]{a626a4}{(}\EFc{next-overlay-change} pos\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
             \textcolor[HTML]{4078f2}{(}\EFk{and} \textcolor[HTML]{a626a4}{(}\EFc{<} pos next-prop\textcolor[HTML]{a626a4}{)}
                  \textcolor[HTML]{a626a4}{(}\EFc{equal} overlay-faces \textcolor[HTML]{50a14f}{(}\EFf{engrave-faces-overlay-faces-at} pos\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFk{setq} pos \textcolor[HTML]{da8548}{(}\EFc{min} pos next-prop\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    \EFcd{;; }\EFct{Additionally, we include the entire region that specifies the}
    \EFcd{;; }\EFct{`}\textcolor[HTML]{b751b6}{display}\EFct{' property.}
    \textcolor[HTML]{50a14f}{(}\EFk{when} \textcolor[HTML]{da8548}{(}\EFc{get-char-property} pos \EFhq{'}\EFhs{display}\textcolor[HTML]{da8548}{)}
      \textcolor[HTML]{da8548}{(}\EFk{setq} pos \textcolor[HTML]{4078f2}{(}\EFc{next-single-char-property-change} pos \EFhq{'}\EFhs{display} nil limit\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    pos\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-overlay-faces-at} \textcolor[HTML]{a626a4}{(}pos\textcolor[HTML]{a626a4}{)}
  \textcolor[HTML]{a626a4}{(}\EFc{delq} nil \textcolor[HTML]{50a14f}{(}\EFc{mapcar} \textcolor[HTML]{da8548}{(}\EFk{lambda} \textcolor[HTML]{4078f2}{(}o\textcolor[HTML]{4078f2}{)} \textcolor[HTML]{4078f2}{(}\EFc{overlay-get} o \EFhq{'}\EFhs{face}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)} \textcolor[HTML]{da8548}{(}\EFc{overlays-at} pos\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\EFcd{;;; }\EFct{Style helpers}

\textcolor[HTML]{4078f2}{(}\EFk{defcustom} \EFv{engrave-faces-preset-styles} \EFcd{; }\EFct{doom-one-light}
  \EFhq{'}\textcolor[HTML]{a626a4}{(}\textcolor[HTML]{50a14f}{(}default                             \EFb{:short} \EFs{"default"}          \EFb{:slug} \EFs{"D"}     \EFb{:foreground} \EFs{"\#383a42"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-keyword-face}              \EFb{:short} \EFs{"keyword"}          \EFb{:slug} \EFs{"k"}     \EFb{:foreground} \EFs{"\#e45649"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-doc-face}                  \EFb{:short} \EFs{"doc"}              \EFb{:slug} \EFs{"d"}     \EFb{:foreground} \EFs{"\#84888b"} \EFb{:slant} italic\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-type-face}                 \EFb{:short} \EFs{"type"}             \EFb{:slug} \EFs{"t"}     \EFb{:foreground} \EFs{"\#986801"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-string-face}               \EFb{:short} \EFs{"string"}           \EFb{:slug} \EFs{"s"}     \EFb{:foreground} \EFs{"\#50a14f"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-warning-face}              \EFb{:short} \EFs{"warning"}          \EFb{:slug} \EFs{"w"}     \EFb{:foreground} \EFs{"\#986801"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-builtin-face}              \EFb{:short} \EFs{"builtin"}          \EFb{:slug} \EFs{"b"}     \EFb{:foreground} \EFs{"\#a626a4"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-comment-face}              \EFb{:short} \EFs{"comment"}          \EFb{:slug} \EFs{"ct"}    \EFb{:foreground} \EFs{"\#9ca0a4"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-constant-face}             \EFb{:short} \EFs{"constant"}         \EFb{:slug} \EFs{"c"}     \EFb{:foreground} \EFs{"\#b751b6"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-preprocessor-face}         \EFb{:short} \EFs{"preprocessor"}     \EFb{:slug} \EFs{"pp"}    \EFb{:foreground} \EFs{"\#4078f2"} \EFb{:weight} bold\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-negation-char-face}        \EFb{:short} \EFs{"neg-char"}         \EFb{:slug} \EFs{"nc"}    \EFb{:foreground} \EFs{"\#4078f2"} \EFb{:weight} bold\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-variable-name-face}        \EFb{:short} \EFs{"variable"}         \EFb{:slug} \EFs{"v"}     \EFb{:foreground} \EFs{"\#6a1868"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-function-name-face}        \EFb{:short} \EFs{"function"}         \EFb{:slug} \EFs{"f"}     \EFb{:foreground} \EFs{"\#a626a4"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFv{font-lock-comment-delimiter-face}    \EFb{:short} \EFs{"comment-delim"}    \EFb{:slug} \EFs{"cd"}    \EFb{:foreground} \EFs{"\#9ca0a4"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}font-lock-regexp-grouping-construct \EFb{:short} \EFs{"regexp"}           \EFb{:slug} \EFs{"rc"}    \EFb{:foreground} \EFs{"\#4078f2"} \EFb{:weight} bold\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}font-lock-regexp-grouping-backslash \EFb{:short} \EFs{"regexp-backslash"} \EFb{:slug} \EFs{"rb"}    \EFb{:foreground} \EFs{"\#4078f2"} \EFb{:weight} bold\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}\EFc{org-block}                           \EFb{:short} \EFs{"org-block"}        \EFb{:slug} \EFs{"ob"}\textcolor[HTML]{50a14f}{)} \EFcd{; }\EFct{forcing no background is preferable}
    \textcolor[HTML]{50a14f}{(}highlight-numbers-number            \EFb{:short} \EFs{"number"}           \EFb{:slug} \EFs{"hn"}    \EFb{:foreground} \EFs{"\#da8548"} \EFb{:weight} bold\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}highlight-quoted-quote              \EFb{:short} \EFs{"qquote"}           \EFb{:slug} \EFs{"hq"}    \EFb{:foreground} \EFs{"\#4078f2"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}highlight-quoted-symbol             \EFb{:short} \EFs{"qsymbol"}          \EFb{:slug} \EFs{"hs"}    \EFb{:foreground} \EFs{"\#986801"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-1-face     \EFb{:short} \EFs{"rd1"}              \EFb{:slug} \EFs{"rdi"}   \EFb{:foreground} \EFs{"\#4078f2"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-2-face     \EFb{:short} \EFs{"rd2"}              \EFb{:slug} \EFs{"rdii"}  \EFb{:foreground} \EFs{"\#a626a4"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-3-face     \EFb{:short} \EFs{"rd3"}              \EFb{:slug} \EFs{"rdiii"} \EFb{:foreground} \EFs{"\#50a14f"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-4-face     \EFb{:short} \EFs{"rd4"}              \EFb{:slug} \EFs{"rdiv"}  \EFb{:foreground} \EFs{"\#da8548"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-5-face     \EFb{:short} \EFs{"rd5"}              \EFb{:slug} \EFs{"rdv"}   \EFb{:foreground} \EFs{"\#b751b6"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-6-face     \EFb{:short} \EFs{"rd6"}              \EFb{:slug} \EFs{"rdvi"}  \EFb{:foreground} \EFs{"\#986801"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-7-face     \EFb{:short} \EFs{"rd7"}              \EFb{:slug} \EFs{"rdvii"} \EFb{:foreground} \EFs{"\#4db5bd"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-8-face     \EFb{:short} \EFs{"rd8"}              \EFb{:slug} \EFs{"rdiix"} \EFb{:foreground} \EFs{"\#80a880"}\textcolor[HTML]{50a14f}{)}
    \textcolor[HTML]{50a14f}{(}rainbow-delimiters-depth-9-face     \EFb{:short} \EFs{"rd9"}              \EFb{:slug} \EFs{"rdix"}  \EFb{:foreground} \EFs{"\#887070"}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
  \EFd{"Overriding face values.

By setting :foreground, :background, etc. a certain theme can be set for
the faces.  The face attributes here will also be used when calculating
inherited styles.

Faces here will represented more compactly when possible, by using the
:short or :slug parameter to produce a named version styles, wheras other
faces will need to be explicitly styled each time they're used."}
  \EFb{:type} \EFhq{'}\textcolor[HTML]{a626a4}{(}repeat \textcolor[HTML]{50a14f}{(}\EFf{repeat} \textcolor[HTML]{da8548}{(}choice symbol string\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
  \EFb{:group} \EFhq{'}\EFhs{engrave-faces}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-check-nondefault} \textcolor[HTML]{a626a4}{(}attr value\textcolor[HTML]{a626a4}{)}
  \EFd{"Return VALUE as long as it is specified, and not the default for ATTR."}
  \textcolor[HTML]{a626a4}{(}\EFk{unless} \textcolor[HTML]{50a14f}{(}\EFk{or} \textcolor[HTML]{da8548}{(}\EFc{eq} value \textcolor[HTML]{4078f2}{(}\EFc{face-attribute} \EFhq{'}\EFhs{default} attr nil t\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}
              \textcolor[HTML]{da8548}{(}\EFc{eq} value \EFhq{'}\EFhs{unspecified}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
    value\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFk{defun} \EFf{engrave-faces-generate-preset} \textcolor[HTML]{a626a4}{(}\textcolor[HTML]{a626a4}{)}
  \EFd{"Generate `}\textcolor[HTML]{b751b6}{\textit{engrave-faces-preset-styles}}\EFd{' based on the current theme."}
  \textcolor[HTML]{a626a4}{(}\EFc{mapcar}
   \textcolor[HTML]{50a14f}{(}\EFk{lambda} \textcolor[HTML]{da8548}{(}face-style\textcolor[HTML]{da8548}{)}
     \textcolor[HTML]{da8548}{(}\EFc{apply} \EFhq{\#'}\EFhs{append}
            \textcolor[HTML]{4078f2}{(}\EFc{list} \textcolor[HTML]{a626a4}{(}\EFc{car} face-style\textcolor[HTML]{a626a4}{)}
                  \EFb{:short} \textcolor[HTML]{a626a4}{(}\EFc{plist-get} \textcolor[HTML]{50a14f}{(}\EFc{cdr} face-style\textcolor[HTML]{50a14f}{)} \EFb{:short}\textcolor[HTML]{a626a4}{)}
                  \EFb{:slug} \textcolor[HTML]{a626a4}{(}\EFc{plist-get} \textcolor[HTML]{50a14f}{(}\EFc{cdr} face-style\textcolor[HTML]{50a14f}{)} \EFb{:slug}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
            \textcolor[HTML]{4078f2}{(}\EFc{delq} nil
                  \textcolor[HTML]{a626a4}{(}\EFc{mapcar}
                   \textcolor[HTML]{50a14f}{(}\EFk{lambda} \textcolor[HTML]{da8548}{(}attr\textcolor[HTML]{da8548}{)}
                     \textcolor[HTML]{da8548}{(}\EFk{let} \textcolor[HTML]{4078f2}{(}\textcolor[HTML]{a626a4}{(}attr-val \textcolor[HTML]{50a14f}{(}\EFc{face-attribute} \textcolor[HTML]{da8548}{(}\EFc{car} face-style\textcolor[HTML]{da8548}{)} attr nil t\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}
                       \textcolor[HTML]{4078f2}{(}\EFk{when} \textcolor[HTML]{a626a4}{(}\EFk{or} \textcolor[HTML]{50a14f}{(}\EFf{engrave-faces-check-nondefault} attr attr-val\textcolor[HTML]{50a14f}{)}
                                 \textcolor[HTML]{50a14f}{(}\EFc{eq} \textcolor[HTML]{da8548}{(}\EFc{car} face-style\textcolor[HTML]{da8548}{)} \EFhq{'}\EFhs{default}\textcolor[HTML]{50a14f}{)}\textcolor[HTML]{a626a4}{)}
                         \textcolor[HTML]{a626a4}{(}\EFc{list} attr attr-val\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
                   \EFv{engrave-faces-attributes-of-interest}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}\textcolor[HTML]{da8548}{)}\textcolor[HTML]{50a14f}{)}
   \EFv{engrave-faces-preset-styles}\textcolor[HTML]{a626a4}{)}\textcolor[HTML]{4078f2}{)}

\textcolor[HTML]{4078f2}{(}\EFc{provide} \EFhq{'}\EFc{engrave-faces}\textcolor[HTML]{4078f2}{)}
\EFcd{;;; }\EFct{engrave-faces.el ends here}
\end{Verbatim}
\end{document}
