build.sh (2784B)
1 #!/bin/sh 2 3 recursivebuild() { 4 local destdir=$(echo $1 | sed 's|^src|http|') 5 local destdir_gmi=$(echo $1 | sed 's|^src|gemini|') 6 mkdir -p "$destdir" 7 mkdir -p "$destdir_gmi" 8 for file in $(ls $1); do 9 if [ -d "$1/$file" ]; then 10 mkdir -p "$destdir/$file" 11 mkdir -p "$destdir_gmi/$file" 12 recursivebuild "$1/$file" 13 else 14 extension=$(echo "$file" | sed 's/.*\.//') 15 if [ "$extension" = "md" ]; then 16 sed "s/TITLE/$(grep '^\# ' < "$1/$file" \ 17 | head -n 1 \ 18 | sed 's/^\# //')/" < top.html \ 19 > "$destdir/index.html" 20 lowdown "$1/$file" >> "$destdir/index.html" 21 cat bottom.html >> "$destdir/index.html" 22 23 # TODO: the following lines contain a dirty fix 24 # to deal with a bug in lowdown. Remove all the 25 # sed lines when fixed. 26 lowdown -Tgemini --gemini-link-roman \ 27 "$1/$file" \ 28 | sed '/```./i\ 29 ``` 30 ' \ 31 | sed '/```./ s/```//' \ 32 > "$destdir_gmi/index.gmi" 33 cat bottom.gmi >> "$destdir_gmi/index.gmi" 34 elif [ "$extension" = "html" ]; then 35 cat top.html "$1/$file" bottom.html \ 36 | sed "s/TITLE/$(grep '<!--TITLE: ' <\ 37 "$1/$file" \ 38 | sed 's/^<!--TITLE: //' \ 39 | sed 's/-->$//')/" \ 40 > "$destdir/index.html" 41 elif [ "$extension" = "gmi" ]; then 42 cat "$1/$file" bottom.gmi > \ 43 "$destdir_gmi/index.gmi" 44 else 45 cp "$1/$file" "$destdir/$file" 46 cp "$1/$file" "$destdir_gmi/$file" 47 fi 48 fi 49 done 50 } 51 52 makeblog() { 53 bf=src/blog/blog.md 54 ff=src/blog/feed.xml 55 56 printf "# Blog\n\n[RSS Feed](feed.xml)\n\n" > $bf 57 cp feed-top.xml $ff 58 59 for i in $(ls src/blog | sort -r); do 60 if [ -d src/blog/$i ]; then 61 f="src/blog/$i/*.md" 62 d=$(echo $i | grep -oE '^[0-9]{4}-[0-9]{2}-[0-9]{2}') 63 t=$(head -n 1 $f | sed 's/# //') 64 65 thisyear=$(echo $d | sed 's/-.*//') 66 if [ "$thisyear" != "$lastyear" ]; then 67 printf "\n## $thisyear\n\n" >> $bf 68 lastyear=$thisyear 69 fi 70 71 echo "* $d [$t]($i)" >> $bf 72 73 echo "<item>" >> $ff 74 echo "<title>$t</title>" >> $ff 75 echo "<link>https://sebastiano.tronto.net/blog/$i</link>" >> $ff 76 echo "<description>$t</description>" >> $ff 77 echo "<pubDate>$d</pubDate>" >> $ff 78 echo "</item>" >> $ff 79 echo "" >> $ff 80 fi 81 done 82 83 echo "" >> $ff 84 echo "</channel>" >> $ff 85 echo "</rss>" >> $ff 86 } 87 88 gemblog() { 89 bg=gemini/blog/index.gmi 90 91 printf "# Blog\n\n=> feed.xml RSS Feed\n\n" > $bg 92 for i in $(ls src/blog | sort -r); do 93 if [ -d src/blog/$i ]; then 94 d=$(echo $i | grep -oE '^[0-9]{4}-[0-9]{2}-[0-9]{2}') 95 t=$(head -n 1 src/blog/$i/*.md | sed 's/# //') 96 97 thisyear=$(echo $d | sed 's/-.*//') 98 if [ "$thisyear" != "$lastyear" ]; then 99 printf "\n## $thisyear\n\n" >> $bg 100 lastyear=$thisyear 101 fi 102 echo "=> $i $d $t" >> $bg 103 fi 104 done 105 echo "" >> $bg 106 cat bottom.gmi >> $bg 107 } 108 109 makeblog 110 recursivebuild src 111 gemblog