blob: f70a3f95b6632a252a25d816e3dab87b78d4833e (
plain) (
tree)
|
|
#!/bin/sh
TEMPLATE="templates/default.html"
STATIC_DIRS="style img"
TMP_FILE=".tmp"
SRC="src"
OUT="out"
#BASE_URL=""
. ./bin/ssg-template
_log() {
echo [${0}] "$@"
}
_to_html() {
# 1: filename
# stdout: content
lowdown --html-no-skiphtml --html-no-escapehtml "${1}"
}
_install() {
# 1: filename
install -D "${TMP_FILE}" $(_get_out_path "${1}")
}
_template_heredoc() {
echo ". ${PWD}/bin/ssg-template" > "tmp/heredoc"
echo "cat <<EOF_TEMPLATE" >> "tmp/heredoc"
cat "${1}" >> "tmp/heredoc"
echo EOF_TEMPLATE >> "tmp/heredoc"
sh "tmp/heredoc" "${1}" > "${TMP_FILE}"
_to_html "${TMP_FILE}" > "${2}"
}
_convert_urls() {
# file url
if ! echo "${2}" | grep "^http" >/dev/null; then
sed -i "s@href=/@href=$2/@g" "${1}"
fi
sed -i "s@<a[^>]* href=\"[/^\"]*/@<a href=\"$2/@g" "${1}"
sed -i "s@<link[^>]* href=\"[/^\"]*/@<link href=\"$2/@g" "${1}"
sed -i "s@<img[^>]* src=\"[/^\"]*/@<img src=\"$2/@g" "${1}"
}
main() {
local file
local out_path
# template files
for template in header footer; do
_log "> ${template}"
_to_html "templates/${template}.md" > "${TMP_FILE}"
install -D "${TMP_FILE}" "tmp/${template}.html"
done
# markdown files
for file in $(find "${SRC}" -iname "*.md"); do
out_path=$(_get_out_path "${file}")
if [ "${file}" -ot "${out_path}" ]; then
_log "! ${file}"
continue
fi
_log "> ${file}"
# Metadata
_cleanup_tmp_file "tmp/metadata.html"
_render_metadata "${file}" > "tmp/metadata.html"
# Table of content
_cleanup_tmp_file "tmp/toc.html"
if [ $(_get_value "${file}" "toc") ]; then
_render_toc "${file}" > "tmp/toc.html"
fi
# Index of directory
_cleanup_tmp_file "tmp/index.html"
if [ $(_get_value "${file}" "index") ]; then
_render_index "${file}" > "tmp/index.html"
fi
# Render body content
_to_html "${file}" > "tmp/body.html"
# Erase body content with templating
if basename "${file}" | grep "^_"; then
_template_heredoc "${file}" "tmp/body.html"
fi
# Concatenate temporary files to final page
m4 templates/default.html > "${TMP_FILE}"
install -D "${TMP_FILE}" "${out_path}"
done
# html files
for file in $(find "${SRC}" -iname "*.html"); do
_log "> ${file}"
_install "${file}"
done
# convert urls
for file in $(find "${OUT}" -iname "*.html"); do
_convert_urls "${file}" "${BASE_URL}"
done
for dir in ${STATIC_DIRS}; do
_log "> ${dir}/"
cp -R "src/${dir}" "out/${dir}"
done
}
main
|