diff --git a/Makefile b/Makefile index 9ecc847..e48ea8c 100644 --- a/Makefile +++ b/Makefile @@ -47,9 +47,11 @@ DST_PANDOC_FILES ?= $(patsubst %$(EXT),%.html, \ $(SRC_PANDOC_FILES))) PANDOC_TEMPLATE ?= templates/post.html PANDOC_LUA_FILTER ?= engine/links-to-html.lua +PANDOC_LUA_FILTER_IMG ?= engine/img-to-webp.lua +PANDOC_LUA_METAS ?= engine/metas.lua MK_HTML := engine/mk-html.sh -PANDOC := $(MK_HTML) $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) -$(DST_DIR)/%.html: $(SRC_DIR)/%.org $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) $(MK_HTML) $(ENV_VARS) +PANDOC := $(MK_HTML) $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) $(PANDOC_LUA_FILTER_IMG) $(PANDOC_LUA_METAS) +$(DST_DIR)/%.html: $(SRC_DIR)/%.org $(PANDOC_TEMPLATE) $(PANDOC_LUA_FILTER) $(PANDOC_LUA_FILTER_IMG) $(PANDOC_LUA_METAS) $(MK_HTML) $(ENV_VARS) @mkdir -p "$(dir $@)" $(PANDOC) "$<" "$@.tmp" minify --mime text/html "$@.tmp" > "$@" diff --git a/engine/img-to-webp.lua b/engine/img-to-webp.lua new file mode 100644 index 0000000..85e997e --- /dev/null +++ b/engine/img-to-webp.lua @@ -0,0 +1,9 @@ +-- img-to-webp.lua +function Image(el) + local fileext = el.src:match("%.[^%.]+$"); + -- DEBUG -- print("LUA IMG: ", fileext); + if ( fileext == ".jpg" or fileext == ".png" or fileext == ".jpeg" ) then + el.src = el.src .. ".webp" + end + return el +end diff --git a/engine/metas.lua b/engine/metas.lua new file mode 100644 index 0000000..701c11d --- /dev/null +++ b/engine/metas.lua @@ -0,0 +1,22 @@ +-- intermediate store for variables and their values +local variables = {} + +--- Function called for each raw block element. +function RawBlock (raw) + -- Don't do anything unless the block contains *org* markup. + if raw.format ~= 'org' then return nil end + + -- extract variable name and value + local name, value = raw.text:match '#%+(%w+):%s*(.+)$' + if name and value then + variables[name] = value + end +end + +-- Add the extracted variables to the document's metadata. +function Meta (meta) + for name, value in pairs(variables) do + meta[name] = value + end + return meta +end diff --git a/engine/mk-html.sh b/engine/mk-html.sh index 5fbce41..e58953d 100755 --- a/engine/mk-html.sh +++ b/engine/mk-html.sh @@ -4,8 +4,10 @@ set -eu cd "$(git rev-parse --show-toplevel)" || exit 1 template="$1" luafilter="$2" -orgfile="$3" -htmlfile="$4" +luafilterimg="$3" +luametas="$4" +orgfile="$5" +htmlfile="$6" tocoption="" if grep -ie '^#+options:' "$orgfile" | grep 'toc:t'>/dev/null; then @@ -16,6 +18,8 @@ set -x pandoc $tocoption \ --template="$template" \ --lua-filter="$luafilter" \ + --lua-filter="$luafilterimg" \ + --lua-filter="$luametas" \ --mathml \ --from org \ --to html5 \ diff --git a/engine/optim-img.sh b/engine/optim-img.sh index 6038304..62b4eb3 100755 --- a/engine/optim-img.sh +++ b/engine/optim-img.sh @@ -7,10 +7,18 @@ sizeof() { stat --format="%s" "$*" } -convert "$src" -resize 800x800\> -quality 50 "$dst" + +convert "$src" -resize 800x800\> "$dst" before=$(sizeof $src) -after=$(sizeof $dst) + +if [[ "${src:e}" == "gif" ]]; then + after=$(sizeof $dst) +else + cwebp "$dst" -quiet -o "$dst.webp" + after=$(sizeof $dst.webp) +fi + if (( before <= after )); then cp -f "$src" "$dst" diff --git a/shell.nix b/shell.nix index ffea5d8..0c3553e 100644 --- a/shell.nix +++ b/shell.nix @@ -24,6 +24,7 @@ pkgs.mkShell { direnv ghc tmux + libwebp # for emacs dev ripgrep nodePackages.http-server diff --git a/src/posts/0002-troll-2/index.org b/src/posts/0002-troll-2/index.org index 3d03428..3b46209 100644 --- a/src/posts/0002-troll-2/index.org +++ b/src/posts/0002-troll-2/index.org @@ -9,6 +9,8 @@ #+LANG: en #+OPTIONS: H:5 auto-id:t #+STARTUP: showeverything +#+lightbk: #0f0 +#+darkbk: #080 #+html_head_extra: #+begin_notes diff --git a/src/posts/0019-utopia-tv-show/index.org b/src/posts/0019-utopia-tv-show/index.org index 432d6dc..83df0f4 100644 --- a/src/posts/0019-utopia-tv-show/index.org +++ b/src/posts/0019-utopia-tv-show/index.org @@ -14,6 +14,8 @@ #+lang: en #+options: auto-id:t #+startup: showeverything +#+lightbk: #ff0 +#+darkbk: #880 #+html_head_extra: