#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: conf FILENAME conf -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message FILENAME the name of the input file, also to be used as URL. Separate the content from the "frontmatter", and emit the selected one, given the FILENAME. Examples: Get the "frontmatter" of src/f.conf: $ conf src/f.md > src/f.conf EOF } for flag in "$@"; do case "$flag" in --) break ;; --help) usage help exit ;; *) ;; esac done while getopts 'h' flag; do case "$flag" in h) usage help exit ;; *) usage >&2 exit 2 ;; esac done shift $((OPTIND - 1)) . src/lib.sh FILENAME="${1:-}" eval "$(assert_arg "$FILENAME" 'FILENAME')" shesc() { sed 's|\([`"$]\)|\\\1|g' } tee "$FILENAME".tmp < src/lib/base.conf DELIMITER=0 while read -r line; do if [ "$line" = '---' ]; then DELIMITER=$((DELIMITER + 1)) continue fi if [ "$DELIMITER" = 2 ]; then break fi if [ -z "$line" ]; then continue fi KEY="$( printf '%s' "$line" | cut -d: -f1)" VALUE="$(printf '%s' "$line" | cut -d: -f2- | sed 's|^ ||' | shesc)" printf 'export %s="%s"\n' "$KEY" "$VALUE" done < "$FILENAME" | tee -a "$FILENAME".tmp # shellcheck source=/dev/null . "$FILENAME".tmp rm -f "$FILENAME".tmp lang="$(lang-for "$FILENAME")" export lang printf 'export lang="%s"\n' "$lang" cat src/lib/base."${lang:?}".conf # shellcheck source=/dev/null . src/lib/base."$lang".conf if [ -z "${title:-}" ]; then title="${site_name:?}" printf 'export title="%s"\n' "$(printf '%s' "$title" | shesc)" fi if [ -n "${date:-}" ]; then date_iso="$(date -ud "${date:?}" -Is)" printf 'export date_iso="%s"\n' "$date_iso" formatted_date="$(LANG="$lang" date -ud "${date:?}" +"${date_fmt:?}")" export formatted_date printf 'export date_html="%s"\n' "$(envsubst < src/lib/date."$lang".html | shesc)" echo "${FILENAME%.md}.xmlentry" > "$(dirname "$FILENAME")/$date_iso.sortdata" touch "${FILENAME%.md}.sortref" fi if [ -n "${update:-}" ]; then update_iso="$(date -ud "${update:?}" -Is)" printf 'export update_iso="%s"\n' "$update_iso" formatted_update="$(LANG="$lang" date -ud "${update:?}" +"${date_fmt:?}")" export formatted_update printf 'export update_html="%s"\n' "$(envsubst < src/lib/update."$lang".html | shesc)" printf 'export update_xml=" %s"\n' "$update_iso" fi url_part="$(printf '%s' "${FILENAME%.md}.html" | sed "s|^$CONTENT_PREFIX||")" title_uri="$(uri "$title")" printf 'export title_html="%s"\n' "$(printf '%s' "$title" | htmlesc | shesc)" printf 'export filename="%s"\n' "$FILENAME" printf 'export url_part="%s"\n' "$url_part" printf 'export url="%s"\n' "$(url-for "$url_part" | absolute)" printf 'export mailto_uri="%s%s"\n' "${mailto_uri_prefix:?}" "$title_uri" printf 'export discussions_url="%s%s"\n' "${discussions_url_prefix:?}" "$title_uri" printf 'export sourcecode_url="%s%s"\n' "${sourcecode_url_prefix:?}" "$FILENAME" printf 'export style_url="%s"\n' "$(url-for 'style.css')" printf 'export favicon_url="%s"\n' "$(url-for 'favicon.svg')" printf 'export pubkey_url="%s"\n' "$(url-for 'public.asc.txt')" for f in "$CONTENT_PREFIX"/img/*.svg; do name="$(basename "$f" .svg | sed 's|-|_|g')" printf 'export icon_%s_url="%s"\n' "$name" "$(url-for "img/$(basename "$f")")" done # FIXME: special treatment of root printf 'export homepage_url="%s"\n' "$(url-for '/')" printf 'export about_url="%s"\n' "$(url-for "${about_url_name:?}")" if [ "${layout:-}" = 'post' ]; then export mailto_uri="$mailto_uri_prefix$title_uri" export discussions_url="$discussions_url_prefix$title_uri" export sourcecode_url="$sourcecode_url_prefix$FILENAME" printf 'export comment_html="%s"\n' "$(envsubst < src/lib/comment."$lang".html | shesc)" fi