Compare commits

...

4 Commits

Author SHA1 Message Date
Ellis Kenyo d52696836c
Work with multiple HTML content classes 2024-04-21 17:51:12 +08:00
TEC 2601556c27
Look for all languages used in the org buffer
org-babel-load-languages gives the languages that babel can execute, not
languages that it's seen, and we really want the latter.
2024-04-21 17:17:24 +08:00
Ellis Kenyo 4fdba88f1f
Allow CSS rendering of faces to use current theme 2024-04-21 16:20:35 +08:00
Ellis Kenyo 9010e61dc7
Simplify heading/outline CSS generation 2024-04-21 16:18:29 +08:00
1 changed files with 49 additions and 45 deletions

View File

@ -73,9 +73,10 @@ This can be overriden via #+chameleon_theme.")
(plist-put info :latex-engraved-theme chameleon-theme))
t)
((and (org-export-derived-backend-p backend 'html)
(equal (plist-get info :html-content-class) "chameleon"))
(member "chameleon" (split-string (plist-get info :html-content-class))))
(plist-put info :html-content-class
(concat "chameleon "
(concat (plist-get info :html-content-class)
" "
(symbol-name (car custom-enabled-themes))))
(unless (plist-get info :html-engraved-theme)
(plist-put info :html-engraved-theme chameleon-theme))
@ -194,17 +195,17 @@ and the current theme otherwise."
(let ((engrave-faces-current-preset-style (ox-chameleon--get-theme info)))
(require 'engrave-faces-html)
(concat "<style>"
(ox-chameleon--generate-html-root-style)
(ox-chameleon--generate-html-root-style info)
"body { background: var(--bg); color: var(--fg); font-family: var(--variable-pitch-font);}"
"pre { font-family: var(--fixed-pitch-font);}"
(ox-chameleon--generate-html-heading-style)
(ox-chameleon--generate-html-code-style)
(ox-chameleon--generate-html-heading-style info)
(ox-chameleon--generate-html-code-style info)
(ox-chameleon--face-to-css 'link "a")
(ox-chameleon--face-to-css 'link-visited "a:visited")
(ox-chameleon--face-to-css 'highlight "a:hover")
"</style>")))
(defun ox-chameleon--generate-html-root-style ()
(defun ox-chameleon--generate-html-root-style (_info)
(concat
":root {"
(apply #'format "--bg: #%s;\n--fg: #%s;\n" (ox-chameleon--generate-fgbg-colours))
@ -212,16 +213,14 @@ and the current theme otherwise."
(ox-chameleon--face-attr 'variable-pitch :family)
(ox-chameleon--face-attr 'default :family))))
(defun ox-chameleon--generate-html-heading-style ()
(concat
(ox-chameleon--face-to-css 'outline-1 "h1")
(string-join
(cl-loop for i from 2 to 5
collect (ox-chameleon--face-to-css
(intern (format "outline-%s" (- i 1)))
(format "h%s" (- i 1)))))))
(defun ox-chameleon--generate-html-heading-style (_info)
(string-join
(cl-loop for i from 1 to 5
collect (ox-chameleon--face-to-css
(intern (format "outline-%s" i))
(format "h%s" i)))))
(defun ox-chameleon--generate-html-rainbow-parens ()
(defun ox-chameleon--generate-html-rainbow-parens (_info)
(when (require 'rainbow-delimiters nil t)
(string-join
(cl-loop for i from 1 to 9
@ -229,42 +228,47 @@ and the current theme otherwise."
(intern (format "rainbow-delimiters-depth-%s-face" i))
(format ".org-rainbow-delimiters-depth-%s" i))))))
(defun ox-chameleon--generate-html-code-style ()
(defun ox-chameleon--generate-html-code-style (info)
(concat
(ox-chameleon--face-to-css 'org-block ".org-src-container")
(ox-chameleon--face-to-css 'highlight-quoted-symbol ".org-highlight-quoted-symbol")
(ox-chameleon--face-to-css 'highlight-quoted-quote ".org-highlight-quoted-quote")
(ox-chameleon--face-to-css 'highlight-numbers-number ".org-highlight-numbers-number")
(ox-chameleon--generate-html-code-style-font-lock)
(ox-chameleon--generate-html-rainbow-parens)
(ox-chameleon--generate-html-block-names)))
(ox-chameleon--generate-html-code-style-font-lock info)
(ox-chameleon--generate-html-rainbow-parens info)
(ox-chameleon--generate-html-block-names info)))
(defun ox-chameleon--generate-html-block-names ()
(string-join
(mapcar (lambda (lang)
(if-let ((symbols (with-temp-buffer
(org-mode)
prettify-symbols-alist)))
(let ((begin (alist-get "#+begin_src" symbols nil nil #'string=))
(end (alist-get "#+end_src" symbols nil nil #'string=)))
(format
"pre.src-%s::before { content: '%s %s'; display: block; %s }
pre.src-%s::after { content: '%s'; display: block; %s }"
(symbol-name (car lang))
begin
(symbol-name (car lang))
(ox-chameleon--face-to-css 'org-block-begin-line)
(symbol-name (car lang))
end
(ox-chameleon--face-to-css 'org-block-end-line)))
(format
"pre.src-%s::before { content: '%s'; display: block; %s }"
(symbol-name (car lang))
(replace-regexp-in-string "-" " " (capitalize (symbol-name (car lang))))
(ox-chameleon--face-to-css 'org-block-begin-line))))
org-babel-load-languages)))
(defun ox-chameleon--generate-html-block-names (info)
(let ((symbols (with-temp-buffer (org-mode) prettify-symbols-alist))
(languages
(delete-dups
(org-element-map
(plist-get info :parse-tree)
'src-block
(lambda (src)
(org-element-property :language src))
info))))
(mapconcat
(lambda (lang)
(if symbols
(let ((begin (alist-get "#+begin_src" symbols nil nil #'string=))
(end (alist-get "#+end_src" symbols nil nil #'string=)))
(format
"pre.src-%s::before { content: '%s %s'; display: block; %s }
pre.src-%s::after { content: '%s'; display: block; %s }"
lang begin lang
(ox-chameleon--face-to-css 'org-block-begin-line)
lang end
(ox-chameleon--face-to-css 'org-block-end-line)))
(format
"pre.src-%s::before { content: '%s'; display: block; %s }"
lang
(replace-regexp-in-string "-" " " (capitalize lang))
(ox-chameleon--face-to-css 'org-block-begin-line))))
languages
"\n")))
(defun ox-chameleon--generate-html-code-style-font-lock ()
(defun ox-chameleon--generate-html-code-style-font-lock (_info)
(string-join
(mapcar (lambda (face)
(ox-chameleon--face-to-css
@ -291,7 +295,7 @@ and the current theme otherwise."
(concat pre
(string-join
(cl-map 'list (lambda (attr)
(let ((val (ox-chameleon--face-attr face (car attr) t)))
(let ((val (ox-chameleon--face-attr face (car attr))))
(when (engrave-faces--check-nondefault (car attr) val)
(format "%s: %s;" (cdr attr)
(if (eq :weight (car attr))