#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 # Directory webdir="_site" postsdir="$webdir/posts" indexfile="$webdir/index.html" indexdir=".cache/rss" # maximal number of articles to put in the index homepage maxarticles=1000 # HTML Accessors (similar to CSS accessors) dateaccessor='.yyydate' # title and keyword shouldn't be changed titleaccessor='title' keywordsaccessor='meta[name=keywords]::attr(content)' formatdate() { # format the date for RSS local d="$1" # echo "DEBUG DATE: $d" >&2 LC_TIME=en_US date --date $d +'%a, %d %b %Y %H:%M:%S %z' } finddate(){ < $1 hxselect -c $dateaccessor | sed 's/\[//g;s/\]//g;s/ .*$//' } findtitle(){ < $1 hxselect -c $titleaccessor } findkeywords(){ < $1 hxselect -c $keywordsaccessor | sed 's/,/ /g' } mktaglist(){ for keyword in $*; do printf "%s" $keyword done | sed 's#><#>, <#g' } autoload -U colors && colors tmpdir=$(mktemp -d) typeset -a dates dates=( ) for xfic in $indexdir/**/*.xml; do postfile="$(echo "$xfic"|sed 's#^'$postsdir'/##')" blogfile="$(echo "$xfic"|sed 's#.xml$#.html#;s#^'$indexdir'/#posts/#')" printf "%-30s" $postfile d=$(finddate $xfic) echo -n " [$d]" rssdate=$(formatdate $d) title=$(findtitle $xfic) keywords=( $(findkeywords $xfic) ) printf ": %-55s" "$title ($keywords)" taglist=$(mktaglist $keywords) { printf "\\n
  • " printf "\\n%s" "$d" printf "\\n%s" "${blogfile}" "$title" printf "\\n
  • \\n\\n" } >> "$tmpdir/${d}-$(basename $xfic).index" dates=( $d $dates ) echo " [${fg[green]}OK${reset_color}]" done echo "Publishing" # building the body previousyear="" for fic in $(ls $tmpdir/*.index | sort -r | head -n $maxarticles ); do echo "${fic:t}" year=$( echo "${fic:t}" | perl -pe 's#(\d{4})-.*#$1#') if (( year != previousyear )); then echo $year if (( previousyear > 0 )); then echo "" >> $tmpdir/index fi previousyear=$year echo "

    ${year}

    " >> $tmpdir/index title="Y" description="Most recent articles" author="Yann Esposito" body=$(< $tmpdir/index) date=$(LC_TIME=en_US date +'%Y-%m-%d') # A neat trick to use pandoc template within a shell script # the pandoc templates use $x$ format, we replace it by just $x # to be used with envsubst template=$(< templates/index.html | \ sed 's/\$\(header-includes\|table-of-content\)\$//' | \ sed 's/\$if.*\$//' | \ perl -pe 's#(\$[^\$]*)\$#$1#g' ) { export title export author export description export date export body echo ${template} | envsubst } > "$indexfile" rm -rf $tmpdir echo "* HTML INDEX [done]"