From cdc1a9efb76695735c5f6ea91968527f18ec4b6f Mon Sep 17 00:00:00 2001 From: haskal Date: Wed, 7 Jul 2021 00:51:00 -0400 Subject: [PATCH] support for more pict images; copy static images --- doc/todo.md | 1 - render.rkt | 45 ++++++++++++++++++++++++++++++++++++++------- 2 files changed, 38 insertions(+), 8 deletions(-) diff --git a/doc/todo.md b/doc/todo.md index 0d6dbb8..f8673c1 100644 --- a/doc/todo.md +++ b/doc/todo.md @@ -1,6 +1,5 @@ # immediate todo -- handle racket-draw images & just copy regular images - make some CSS - site nav should use titles instead of slugs - user pages diff --git a/render.rkt b/render.rkt index a69bc3b..3cfd159 100644 --- a/render.rkt +++ b/render.rkt @@ -231,12 +231,43 @@ [in (build-path src-dir "index.scss")]) (~> (compile-index-scss (port->string in)) (write-string out))) - (define favicon.rkt (build-path src-dir "favicon.png.rkt")) - (define-rule (favicon [out (build-path output-dir "favicon.png")] - [in favicon.rkt]) - (define icon-pict (dynamic-require favicon.rkt 'icon-pict)) - (define icon-bitmap (pict->bitmap icon-pict)) - (send icon-bitmap save-file out 'png)) + (define img-rules + (parameterize ([current-directory src-dir]) + (for/list ([rkt-file (in-directory #f)] + #:when (regexp-match? #px"\\.(png|jpg|jpeg|svg)\\.rkt$" rkt-file)) + (define out-file (path-replace-extension rkt-file #"")) + (define filetype + (match (path-get-extension out-file) + [#".png" 'png] + [(or #".jpg" #".jpeg") 'jpeg] + [#".svg" 'svg])) + (define-rule (render-1-image [out (build-path output-dir out-file)] + [in (build-path src-dir rkt-file)]) + (define icon-pict (dynamic-require (build-path src-dir rkt-file) 'icon-pict)) + (cond + [(eq? 'svg filetype) + (define dc (new svg-dc% + [width (pict-width icon-pict)] + [height (pict-height icon-pict)] + [output out])) + (send dc start-doc "meow") + (send dc start-page) + (draw-pict icon-pict dc 0 0) + (send dc end-page) + (send dc end-doc)] + [else + (define icon-bitmap (pict->bitmap icon-pict)) + (send icon-bitmap save-file out filetype)])) + render-1-image))) + + (define static-rules + (parameterize ([current-directory src-dir]) + (for/list ([static-file (in-directory #f)] + #:when (regexp-match? #px"\\.(png|jpg|jpeg|svg)$" static-file)) + (define-rule (copy-static [out (build-path output-dir static-file)] + [in (build-path src-dir static-file)]) + (copy-port in out)) + copy-static))) (struct rule-spec [src intermediate output xref-name] #:transparent) @@ -303,7 +334,7 @@ (ir-doc->page xrefs-repo config) (write-string out))) output-rule)) - (append intermediate-rules output-rules (list scss favicon hashtag-page))) + (append intermediate-rules output-rules img-rules static-rules (list scss hashtag-page))) (module+ main (require racket/cmdline)