mdb/blog-refresh.sh

116 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
blog_domain='https://lucy.moe/'
output() {
echo "$1" >> dist/index-alt.html
}
output_entrylist() {
echo "$1" >> dist/entry_list.md
}
output_rss() {
echo "$1" >> dist/rss.xml
}
add_header() {
output '<table>
<colgroup>
<col style="width: 70%" />
<col style="width: 30%" />
</colgroup>
<thead>
<tr class="header">
<th style="text-align: left">title</th>
<th style="text-align: right">date</th>
</tr>
</thead>
<tbody>'
output_entrylist "title| date
----|----:"
output_rss '<?xml version="1.0" encoding="UTF-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
<author><name>Lucy</name></author>
<title type="text">Lucys blog</title>'
output_rss " <updated>$(date --iso-8601=seconds)</updated>
<id>https://lucy.moe/rss.xml</id>
<link href=\"https://lucy.moe/rss.xml\" rel=\"self\" type=\"application/atom+xml\"/>"
}
add_footer() {
html_entry "https://asagi.moe" "before July 2020" "Old site"
output '</tbody>
</table>'
output_rss '</feed>'
}
html_entry() {
output '<tr>'
webpath="$1"
time="$2"
title="$3"
output "<td><a href=\"$webpath\">$title</a></td>"
output "<td style=\"text-align: right\">$time</td></tr>"
output_entrylist "[$title]($webpath)|$time"
}
rss_entry() {
# The content is the output minus the first line
# (which would otherwise be a redundant title in most rss readers)
# and with escaped html.
# The sed expression is stolen from https://stackoverflow.com/questions/12873682/12873723#12873723
output_rss " <entry>
<title type=\"text\">$1</title>
<published>$(date --iso-8601=seconds -d $4)</published>
<updated>$(date --iso-8601=seconds -r $3)</updated>
<id>$blog_domain$2</id>
<link href=\"$blog_domain$2\" type=\"text/html\" title=\"$1\"/>
<summary type=\"html\">
$(grep -h '^<p>' "dist/$2" | head -n 1 | sed 's/<p>//;s/<\/p>//;/<!--/d;s/^/ /')
</summary>
<content type=\"html\" xml:base=\"$blog_domain$2\"><![CDATA[
$(pandoc $3 | sed '/<!--/d;s/^/ /')]]>
</content>
</entry>"
# $(tail -n+2 "$2" | sed 's/&/\&amp;/g; s/</\&lt;/g; s/>/\&gt;/g; s/"/\&quot;/g; s/'"'"'/\&#39;/g')
}
create_entry() {
path="$9"
outpath="$(basename "$path" .md).html"
# convert new markdown posts to html
pandoc -s --css=/css/sakura-vader.css "$path" src/footer/footer.md -t html5 -f markdown -o "dist/$outpath"
# then add it to the index
title=$(grep -h '<title>' "dist/$outpath" | sed 's/<title>//g;s/<\/title>//g')
created=$(grep -h '^date: ' "$path" | sed 's/date: //g')
created_date=$(date +'%b %d, %Y' --date="$created")
html_entry "$outpath" "$created_date" "$title"
rss_entry "$title" "$outpath" $path $created
}
convert_static() {
path="$9"
outpath="$(basename "$path" .md).html"
pandoc -s --css=/css/sakura-vader.css "$path" src/footer/footer.md -t html5 -f markdown -o "dist/$outpath"
}
has_updates() {
git fetch &> /dev/null
diff="$(git diff master origin/master)"
if [ "$diff" ]; then
return 0
else
return 1
fi
}
cd /home/lucy/blog-content/
rm -R dist/*
rsync --delete -avxt static/ dist/
add_header
ls -lr src/posts/*.md | tail -n+1 | while read f; do create_entry $f; done
ls -l src/*.md | tail -n+1 | while read f; do convert_static $f; done
add_footer
pandoc -s --css=/css/sakura-vader.css src/index/index_header.md dist/index-alt.html src/index/after-entry-list.md src/footer/footer.md -o dist/index.html