diff options
-rw-r--r-- | www/Makefile | 21 | ||||
-rwxr-xr-x | www/index.sh | 81 | ||||
-rwxr-xr-x | www/publish.sh | 10 |
3 files changed, 64 insertions, 48 deletions
diff --git a/www/Makefile b/www/Makefile index bcf230b1..10eb66fc 100644 --- a/www/Makefile +++ b/www/Makefile @@ -18,26 +18,27 @@ HTML_MAIN = $(MD_MAIN:.md=.html) MD_NEWS != cat news/MANIFEST HTML_NEWS = $(MD_NEWS:.md=.html) +HTML_BARE_NEWS = $(MD_NEWS:.md=.bare.html) -# news/index.html implies the building of $(HTML_NEWS). -all: $(HTML_MAIN) news/index.html +# news/index.html implies the building of $(HTML_BARE_NEWS). +all: $(HTML_MAIN) $(HTML_NEWS) news/index.html -.SUFFIXES: .md .html -# Does not apply for news/index.md; see below. +.SUFFIXES: .md .html .bare.html .md.html: ./publish.sh $< +.md.bare.html: + pandoc $(<) > $(<:.md=.bare.html) + # Unlike all the other markdown files, news/index.md does not exist at first: -# it must be generated by index.sh. Also note that index.sh depends on the -# existence of the HTML version of all news items, hence the dependency line -# below. -news/index.md: $(HTML_NEWS) +# it must be generated by index.sh. Also note that index.sh generates the RSS +# feed, which requires the bare HTML versions of all news items. +news/index.md: $(HTML_BARE_NEWS) ./index.sh clean: - rm -f $(HTML_MAIN) $(HTML_MAIN:.html=.bare.html) \ - $(HTML_NEWS) $(HTML_NEWS:.html=.bare.html) \ + rm -f $(HTML_MAIN) $(HTML_NEWS) $(HTML_BARE_NEWS) \ news/index.md news/index.html news/index.bare.html \ feed.xml news/feed.xml diff --git a/www/index.sh b/www/index.sh index 618b8fc5..587c5d8e 100755 --- a/www/index.sh +++ b/www/index.sh @@ -1,6 +1,7 @@ #!/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=$(printf '%s\n' ${f%.md}.html | sed -e s-news/--) + file=$1 + URL=$(printf '%s\n' "${file%.md}.html" | sed -e s-news/--) - printf '%s\n' "[$(title)]($URL){.title}" - printf '%s\n' "[$(sed -n 3p $f | sed -e s-^..--)]{.date}" + printf '%s\n' "[$(title "$file")]($URL){.title}" + printf '%s\n' "[$(sed -n 3p "$file" | sed -e s-^..--)]{.date}" printf '\n' - tail -n +5 $f | perl -p0e 's/(\.|\?|\!)( |\n)(.|\n)*/.../g' + tail -n +5 "$file" | perl -p0e 's/(\.|\?|\!)( |\n)(.|\n)*/.../g' printf '\n' printf '\n' } -# generate the index file - -# MANIFEST determines the order of news articles in news/index.md -FILES=$(cat news/MANIFEST) - -cat news-list.md > news/index.md - -for f in $FILES -do - meta >> news/index.md -done - -# generate an RSS index - -rss() { +# usage: rss_header +rss_header() { printf '%s\n' '<rss version="2.0">' printf '%s\n' '<channel>' printf '%s\n' "<title>$BLOGTITLE</title>" - printf '%s\n' "<link>"$BLOGBASE"news/</link>" + printf '%s\n' "<link>${BLOGBASE}news/</link>" printf '%s\n' "<description>$BLOGDESCRIPTION</description>" +} + +# usage: rss_main file +rss_main() { + file=$1 - for f in $FILES - do - # render content and escape - desc=$(sed -e 's/</\</g' ${f%.md}.bare.html | sed -e 's/>/\>/g') - url="${f%.md}.html" + # render content and escape + desc=$(sed -e 's/</\</g' "${file%.md}.bare.html" | sed -e 's/>/\>/g') + url="${file%.md}.html" - printf '%s\n' '<item>' - printf '%s\n' "<title>$(title)</title>" - printf '%s\n' "<link>$BLOGBASE$url</link>" - printf '%s\n' "<description>$desc</description>" - printf '%s\n' '</item>' - done + 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>' +} +# usage: rss_footer +rss_footer() { printf '%s\n' '</channel>' printf '%s\n' '</rss>' } -rss > news/feed.xml + +# generate the index file +cat news-list.md > news/index.md +for f in $FILES +do + meta "$f" >> news/index.md +done + +# 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 + cp news/feed.xml feed.xml diff --git a/www/publish.sh b/www/publish.sh index 9c3a4fcd..9a8a6abc 100755 --- a/www/publish.sh +++ b/www/publish.sh @@ -70,14 +70,14 @@ TOC=$(grep -q "^x-toc-enable: true$" "$TMPFILE" && printf '%s\n' "--toc --toc-de SMART=$(pandoc -v | grep -q '2\.0' || printf '%s\n' "--smart") || SMART="" # chuck through pandoc +# +# $OPTS must not be quoted, otherwise pandoc interprets '--css /headercenter.css' +# as one argument, when it is actually two. pandoc $TOC $SMART "$TMPFILE" -s --css /global.css $OPTS \ - --template template.html --metadata return="$RETURN"> $FILE.html - -# additionally, produce bare file for RSS -pandoc $1 > $FILE.bare.html + --template template.html --metadata return="$RETURN" > "$FILE.html" # generate section title anchors as [link] -sed -i -e 's_^<h\([123]\) id="\(.*\)">\(.*\)</h\1>_<div class="h"><h\1 id="\2">\3</h\1><a aria-hidden="true" href="#\2">[link]</a></div>_' $FILE.html +sed -i -e 's_^<h\([123]\) id="\(.*\)">\(.*\)</h\1>_<div class="h"><h\1 id="\2">\3</h\1><a aria-hidden="true" href="#\2">[link]</a></div>_' "$FILE.html" # clean up temporary file rm -f "$TMPFILE" |