diff options
author | Arun Isaac | 2022-12-25 15:58:35 +0000 |
---|---|---|
committer | Arun Isaac | 2022-12-25 23:33:04 +0000 |
commit | 806205382950bf3273d18872987b516f30c3d11f (patch) | |
tree | 6690917a019f7fd89bf5f03309c5a1c53527c338 | |
parent | df7c2f672d5b413fb8bf5bc4811b5dff9d56c919 (diff) | |
download | tissue-806205382950bf3273d18872987b516f30c3d11f.tar.gz tissue-806205382950bf3273d18872987b516f30c3d11f.tar.lz tissue-806205382950bf3273d18872987b516f30c3d11f.zip |
web: static: Introduce functional html engine customizer.
* tissue/web/static.scm (engine-custom-set): New function.
(html-engine): New public function.
(gemtext-exporter, skribe-exporter): Use html-engine in default value
of engine.
-rwxr-xr-x | bin/tissue | 1 | ||||
-rw-r--r-- | tissue/web/static.scm | 32 |
2 files changed, 23 insertions, 10 deletions
@@ -418,7 +418,6 @@ HOSTNAME." (lambda (temporary-output-directory) (build-website (git-top-level) temporary-output-directory - (tissue-configuration-web-css config) (tissue-configuration-web-files config)) (delete-file-recursively website-directory) (rename-file temporary-output-directory diff --git a/tissue/web/static.scm b/tissue/web/static.scm index 38a7d42..587799d 100644 --- a/tissue/web/static.scm +++ b/tissue/web/static.scm @@ -40,6 +40,7 @@ file-writer replace-extension copier + html-engine gemtext-reader gemtext-exporter skribe-exporter @@ -77,6 +78,25 @@ read from and the output port to write to." get-bytevector-some in)))) +(define (engine-custom-set engine key value) + "Set custom @var{key} of @var{engine} to @var{value}. This is a purely +functional setter that operates on a copy of @var{engine}. It does not +mutate @var{engine}." + (let ((clone (copy-engine (engine-ident engine) engine))) + (engine-custom-set! clone key value) + clone)) + +(define* (html-engine #:key css) + "Return a new HTML engine. + +@var{css} is the URI to a CSS stylesheet. If it is @code{#f}, no +stylesheet is included in the generated web pages." + (if css + (engine-custom-set (find-engine 'html) + 'css + (list css)) + (find-engine 'html))) + (define (gemtext-reader) "Return a skribilo reader for gemtext." ((reader:make (lookup-reader 'gemtext)) @@ -84,7 +104,7 @@ read from and the output port to write to." #:join-lines? #t)) (define* (gemtext-exporter file #:key (reader (gemtext-reader)) - (engine (find-engine 'html))) + (engine (html-engine))) "Return a writer function that reads gemtext @var{file} using @var{reader} and exports it using @var{engine}." (exporter file @@ -95,7 +115,7 @@ read from and the output port to write to." engine))))) (define* (skribe-exporter file #:key (reader (make-reader 'skribe)) - (engine (find-engine 'html))) + (engine (html-engine))) "Return a writer function that reads skribe @var{file} using @var{reader} and exports it using @var{engine}." (exporter file @@ -113,21 +133,15 @@ original current directory." thunk (cut chdir previous-current-directory)))) -(define* (build-website repository-top-level output-directory css files +(define* (build-website repository-top-level output-directory files #:key (log-port (current-error-port))) "Export git repository with REPOSITORY-TOP-LEVEL to OUTPUT-DIRECTORY as a website. -CSS is the path to a CSS stylesheet. If it is #f, no stylesheet is -included in the generated web pages. - FILES is a list of <file> objects representing files to be written to the web output. Log to LOG-PORT. When LOG-PORT is #f, do not log." - ;; Set CSS. - (when css - (engine-custom-set! (find-engine 'html) 'css css)) ;; Create output directory. (make-directories output-directory) ;; Write each of the <file> objects. |