diff options
Diffstat (limited to 'www/index.sh')
-rwxr-xr-x | www/index.sh | 95 |
1 files changed, 55 insertions, 40 deletions
diff --git a/www/index.sh b/www/index.sh index c70c5a7a..587c5d8e 100755 --- a/www/index.sh +++ b/www/index.sh @@ -1,6 +1,7 @@ -#!/bin/bash +#!/usr/bin/env bash # # Copyright (C) 2017 Alyssa Rosenzweig <alyssa@rosenzweig.io> +# Copyright (C) 2017 Michael Reed <michael@michaelreed.io> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -19,60 +20,74 @@ BLOGTITLE="Libreboot News" BLOGBASE="https://libreboot.org/" BLOGDESCRIPTION="News on Libreboot development" +# MANIFEST determines the order of news articles in news/index.md +FILES=$(< news/MANIFEST) + + +# usage: title file title() { - sed -n 1p $f | sed -e s-^..-- + sed -n 1p "$1" | sed -e s-^..-- } +# usage: meta file meta() { - URL=$(echo ${f%.md}.html | sed -e s-news/--) + file=$1 + URL=$(printf '%s\n' "${file%.md}.html" | sed -e s-news/--) - echo "[$(title)]($URL){.title}" - echo "[$(sed -n 3p $f | sed -e s-^..--)]{.date}" - echo "" - tail -n +5 $f | perl -p0e 's/(\.|\?|\!)( |\n)(.|\n)*/.../g' + printf '%s\n' "[$(title "$file")]($URL){.title}" + printf '%s\n' "[$(sed -n 3p "$file" | sed -e s-^..--)]{.date}" + printf '\n' + tail -n +5 "$file" | perl -p0e 's/(\.|\?|\!)( |\n)(.|\n)*/.../g' - echo "" - echo "" + printf '\n' + printf '\n' } -# generate the index file +# usage: rss_header +rss_header() { + printf '%s\n' '<rss version="2.0">' + printf '%s\n' '<channel>' -FILES=$(ls -1 -t news/*.md | sed -e s-.*index.md-- -e s-.*presentation.md--) - -cat news-list.md > news/index.md + printf '%s\n' "<title>$BLOGTITLE</title>" + printf '%s\n' "<link>${BLOGBASE}news/</link>" + printf '%s\n' "<description>$BLOGDESCRIPTION</description>" +} -for f in $FILES -do - touch -d "$(sed -n 3p $f | sed -e 's/^..//g')" $f - meta >> news/index.md -done +# usage: rss_main file +rss_main() { + file=$1 -# generate an RSS index + # render content and escape + desc=$(sed -e 's/</\</g' "${file%.md}.bare.html" | sed -e 's/>/\>/g') + url="${file%.md}.html" -rss() { - echo '<rss version="2.0">' - echo '<channel>' + printf '%s\n' '<item>' + printf '%s\n' "<title>$(title "$file")</title>" + printf '%s\n' "<link>$BLOGBASE$url</link>" + printf '%s\n' "<description>$desc</description>" + printf '%s\n' '</item>' +} - echo "<title>$BLOGTITLE</title>" - echo "<link>"$BLOGBASE"news/</link>" - echo "<description>$BLOGDESCRIPTION</description>" +# usage: rss_footer +rss_footer() { + printf '%s\n' '</channel>' + printf '%s\n' '</rss>' +} - for f in $FILES - do - # render content and escape - desc=$(sed ${f%.md}.bare.html -e 's/</\</g' | sed -e 's/>/\>/g') - url="${f%.md}.html" - echo '<item>' - echo "<title>$(title)</title>" - echo "<link>$BLOGBASE$url</link>" - echo "<description>$desc</description>" - echo '</item>' - done +# generate the index file +cat news-list.md > news/index.md +for f in $FILES +do + meta "$f" >> news/index.md +done - echo '</channel>' - echo '</rss>' -} +# generate the RSS index +rss_header > news/feed.xml +for f in $FILES +do + rss_main "$f" >> news/feed.xml +done +rss_footer >> news/feed.xml -rss > news/feed.xml cp news/feed.xml feed.xml |