#!/bin/sh set -eu usage() { cat <<-'EOF' Usage: feed FILENAME feed -h EOF } help() { cat <<-'EOF' Options: -h, --help show this message FILENAME the target feed to be generated Generate FILENAME as an Atom feed. The collection type and language are inferred by the name of FILENAME. Examples: Generate a feed for TILs: $ feed src/en/til/feed.xml 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')" . src/lib/base.conf # shellcheck source=/dev/null . src/lib/base."$(lang-for "$FILENAME")".conf now="$(date -uIs)" url_absolute="$(url-for "${FILENAME#"$CONTENT_PREFIX"/}" | absolute)" site_name_html="$(htmlesc "${site_name:?}")" collection="$(sh src/bin/collection-for "$FILENAME")" coll_path="$(coll2path "${lang:?}" "$collection")" collection_url_absolute="$(url-for "${lang:?}/$coll_path" | absolute)" feed_title_html="$(eval "echo \"\$feed_${collection}_title\"" | htmlesc)" export now url_absolute site_name_html collection_url_absolute feed_title_html DIR="$(dirname "$FILENAME")" mkdir -p "$DIR" { envsubst < src/lib/feed.xml find "$DIR"/*.sortdata 2>/dev/null | sort -nr | xargs cat | sed 's|\.md$|.xmlentry|' | xargs cat printf '\n' } > "$FILENAME" printf '' > "$DIR"/index.extrafeeds while read -r category; do url_absolute="$(url-for "${DIR#"$CONTENT_PREFIX"/}/feed.$category.xml" | absolute)" collection_url_absolute="$(url-for "${DIR#"$CONTENT_PREFIX"/}/${by_category_url_name:?}#$category" | absolute)" feed_title_html="$(eval "echo \"\$index_category_${collection}_title\"" | htmlesc)" export url_absolute collection_url_absolute feed_title_html { envsubst < src/lib/feed.xml < "$DIR/$category.category" \ sed 's|\.md$|.xmlentry|' | xargs cat printf '\n' } > "$DIR/feed.$category.xml" echo "$DIR/feed.$category.xml" >> "$DIR"/index.extrafeeds done < "$DIR"/index.categories