#!/usr/bin/env zsh cd "$(git rev-parse --show-toplevel)" || exit 1 source ./engine/envvars.sh # Directory webdir="_site" postsdir="$webdir/posts" indexdir=".cache/rss" # file to handle fic="$1" dst="$2" # RSS Metas websiteurl="https://her.esy.fun" # HTML Accessors (similar to CSS accessors) dateaccessor='.yyydate' contentaccessor='#content' # 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 } getcontent(){ < $1 hxselect $contentaccessor | \ perl -pe 'use URI; $base="'$2'"; s# (href|src)="((?!https?://)[^"]*)"#" ".$1."=\"".URI->new_abs($2,$base)->as_string."\""#eig' } findkeywords(){ < $1 hxselect -c $keywordsaccessor | sed 's/,/ /g' } mkcategories(){ for keyword in $*; do printf "\\n%s" $keyword done } autoload -U colors && colors xfic="$fic" postfile="$(echo "$fic"|sed 's#^'$postsdir'/##')" blogfile="$(echo "$fic"|sed 's#.xml$#.html#;s#^'$indexdir'/#posts/#')" printf "%-30s" $blogfile d=$(finddate $xfic) echo -n " [$d]" rssdate=$(formatdate $d) title=$(findtitle $xfic) keywords=( $(findkeywords $xfic) ) printf ": %-55s" "$title ($keywords)" categories=$(mkcategories $keywords) absoluteurl="${websiteurl}/${blogfile}" [[ ! -d $(dirname $dst) ]] && mkdir -p $(dirname $dst) { printf "\\n" printf "\\n%s" "$title" printf "\\n%s" "$absoluteurl" printf "\\n%s%s" "$rssdate" printf "%s" "$categories" printf "\\n" "$(getcontent "$xfic" "$absoluteurl")" printf "\\n\\n\\n" } > "${dst}" echo " [${fg[green]}OK${reset_color}]"