#!/usr/bin/env -S sh -eu # Builds a static site via the passed tree. The following # transformation is performed. # # # ├── *.md ├── *.html # │ ├── .html # ├── ├── # │ └── *.md -> │ └── *.html # ├── ├── # │ └── *.css │ └── *.css # └── └── # ├── ├── # └── * └── * # # '<>'-delimited paths are configured below. if ! which pulldown-cmark > /dev/null; then printf "program 'pulldown-cmark' missing\n" >&2 exit 1 fi root="${0%/*}" # start config input="$root/input" output="$root/output" posts="$input/posts" styles="$input/styles" assets="$input/assets" favicon="$assets/favicon.svg" # end config rm -rf "$output" mkdir -p "$output/${posts#$input/}" for folder in "$styles" "$assets"; do if [ -e "$folder" ]; then cp -r "$folder" "$output/${folder#$input/}"; fi done; unset folder for page in "$input/"*.md "$posts"; do if ! [ -e "$page" ]; then break; fi stem="${page%.md}" stem="${stem#$input/}" element=''"$stem"'' if [ "$page" = "$input/index.md" ]; then navbar="$element${navbar+ | }${navbar-}" else navbar="${navbar-}${navbar+ | }$element" fi done; unset element page stem for style in "$styles/"*.css; do if ! [ -e "$style" ]; then break; fi style_href="${style_href-}"''"${style_href+\n}" done; unset style for page in "$input/"*.md "$posts/"*.md "$posts"; do if ! [ -e "$page" ]; then break; fi stem="${page%.md}" stem="${stem#$input/}" cat > "$output/$stem.html" <<- EOF ${style_href-} ${input#$root/}::$stem ${navbar-} $(if [ "$page" = "$posts" ]; then for post in "$posts/"*.md; do if ! [ -e "$post" ]; then break; fi stem="${post%.md}" stem="${stem#$input/}" contents="${contents-}"''"title="$(printf %s "$stem" | sed "s/-/ /g")""'' done; unset post stem printf %s "${contents-}" else pulldown-cmark "$page" fi) EOF done; unset page stem