## templates
-templates are html snippets that you can customize. these templates are then pieced together to form the final html page. **pinopress** makes extensive use of **gnu envsubst** so in each template, you can use variables that will be substituted in on build.
+templates are html snippets that you can customize. these templates are then pieced together to form the final html page. edit them to your liking. they can be found in the `templates/` directory.
## modules
pinopress articles are written in an enhanced version of markdown. specification coming soon.
+## variables
+
+ **pinopress** makes extensive use of **gnu envsubst** so in each template, you can use variables that will be substituted in on build. variables can be used in both templates and blog articles. Here's a list of some that you can use:
+
+### global
+
+`$SITEURL` - the SITEURL variable you set in the pinopress config
+`$USERVAR1` - global variable you can use however you want
+`$USERVAR2` - a second user defined global variable
+
+### article only
+
+`$ARTICLE_TITLE` - title of article, as set in article header
+`$PUBLISHED_DATE` - the date/time the article was published, as set in the article header
+
+## mounts
+
+coming soon...
+
--- /dev/null
+#!/bin/sh
+
+## module to read meta in header of md file
+## usage:
+## md-header [md_filepath] [header_name]
+
+[ "$#" -ne 2 ] && { echo "Incorrect usage"; exit 1; }
+
+propname=""
+case "$2" in
+ name) propname=name;;
+ published) propname=published;;
+ tags) propname=tags;;
+ *) exit 1;;
+esac
+
+sed -nE "s/^-- ${propname}: (.*)$/\1/p" "$1"
#!/usr/bin/make -sf
SITEURL := https://blog.danieliu.xyz
+USERVAR1 :=
+USERVAR2 :=
.PHONY: help build clean
MODULE_DIR := modules
ARTICLE_PATH := $(BUILD_DIR)/article
-
ARTICLE_LIST := $(basename $(shell ls $(SRC_DIR)))
+# some helper functions
+define export_common
+ export SITEURL="$(SITEURL)"
+ export USERVAR1="$(USERVAR1)"
+ export USERVAR2="$(USERVAR2)"
+endef
+
help:
echo 'pinopress help|build|clean'
build: $(BUILD_DIR)/rolling.html $(BUILD_DIR)/archive.html $(ARTICLE_PATH)/$(addsuffix .html,$(ARTICLE_LIST))
- echo 'building...'
+.ONESHELL:
$(BUILD_DIR)/rolling.html:
echo 'building rolling file'
+ $(export_common)
cat $(TEMPLATE_DIR)/head.template.html $(TEMPLATE_DIR)/rollingbody.template.html $(TEMPLATE_DIR)/foot.template.html > "$@"
+ envsubst < "$@" | sponge "$@"
+.ONESHELL:
$(BUILD_DIR)/archive.html:
echo 'building archive file'
+ $(export_common)
cat $(TEMPLATE_DIR)/head.template.html $(TEMPLATE_DIR)/archivebody.template.html $(TEMPLATE_DIR)/foot.template.html > "$@"
+ envsubst < "$@" | sponge "$@"
+.ONESHELL:
$(ARTICLE_PATH)/%.html: articles/%.md
echo 'parsing $^'
+ $(export_common)
+ export ARTICLE_TITLE="$(shell ./$(MODULE_DIR)/md-header "$<" name)"
+ export PUBLISHED_DATE="$(shell ./$(MODULE_DIR)/md-header "$<" published)"
cat $(TEMPLATE_DIR)/head.template.html > "$@"
# module pipeline starts here
./$(MODULE_DIR)/md "$^" >> "$@"
# module pipeline ends here
cat $(TEMPLATE_DIR)/foot.template.html >> "$@"
+ envsubst < "$@" | sponge "$@"
clean:
echo 'cleaning...'