#!/usr/bin/env bash remove_nbsp() { sed 's#\ # #g' } date_rfc_822() { if [[ "$OSTYPE" == "darwin"* ]]; then date -j '+%a, %d %b %Y %H:%M:%S %z' else date '+%a, %d %b %Y %H:%M:%S %z' fi } date_to_rfc_822() { if [[ "$OSTYPE" == "darwin"* ]]; then date -f "%Y-%m-%dT%H:%M:%SZ" -j '+%a, %d %b %Y %H:%M:%S %z' "$1T00:00:00Z" else date '+%a, %d %b %Y %H:%M:%S %z' -d "$1T00:00:00Z" fi } get_header() { HFILE="$1" HEADER="$2" FILTER="{ \ if (match(\$0, /^$HEADER: /)) {print substr(\$0, RLENGTH+1, length(\$0) - RLENGTH)}; \ if (\$0~/^$/) {exit}; \ if (!\$0~/^[^ ]*: .*$/) {exit}; \ }" awk "$FILTER" "$HFILE" } list_items() { DIR="$1" pushd "$DIR" > /dev/null find . ! -path . -type d | while read -r FN do PAGE="$(echo "$FN" | sed 's/^\.\///g')" #echo "FILE: $PAGE" MD="$PAGE/note.md" if [ ! -f "$MD" ]; then echo "$MD doesn't exist" exit 1; fi SUBJECT="$(get_header "$MD" "Subject")" FDATE="$(get_header "$MD" "X-Date" | sed 's/T.*$//g')" if [ -z "$SUBJECT" ]; then echo "No subject in $MD" exit 1 fi if [ -z "$FDATE" ] && [ "$NODATE" == "0" ]; then echo "No date in $MD" exit 1 fi echo "$FDATE $PAGE $SUBJECT" done popd > /dev/null } render_item() { DIR="$1" base_url="$2" item="$3" site_url="$(echo "$base_url"| sed 's#\(.*//.*\)/.*#\1#')" date=$(echo "$item"|awk '{print $1}') page=$(echo "$item"|awk '{print $2}') title=$(echo "$item"| cut -d ' ' -f 3- ) guid="$base_url/$(echo "$page" | sed 's#^/##')" content=$(cat $DIR/$page/note.md | ./bin/mdpage_plain.sh) cat <<-EOF $guid $guid $(date_to_rfc_822 "$date") $title EOF } render_items() { DIR="$1" base_url="$2" while read -r i do render_item "$DIR" "$base_url" "$i" done } render_feed() { url="$1" title=$(echo "$2" | remove_nbsp) description="$3" base_url="$(echo "$url" | cut -d '/' -f1-3)" cat <<-EOF $title $description $base_url/ $(date_rfc_822) $(cat) EOF } list_items "$1" | sort | tail -10 | render_items "$1" "$2$3" | render_feed "$2" "Konstantin Nazarov" "Konstantin Nazarov's blog"