Mike Gerwitz

Free Software Hacker+Activist

aboutsummaryrefslogtreecommitdiffstats
blob: a3c6182e9aa1517dc99c6cc917d5173793a2d156 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/bin/bash
# Generate posts HTML page
#
#  Copyright (C) 2019 Mike Gerwitz
#
#  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
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# The generated page contains the abstracts of _all_ posts; this may get
# unwieldy over time.
#
# TODO: Maybe refactor common abstract logic with `index.sh' and
# `papers.sh'?
##

set -euo pipefail

# Last generated yet (see `abstract-from').
declare -i lastyear=0


# Get the file name of the Nth most recent post.  This relies on the
# existence of `post/list'.
pnfile()
{
  local -ri n=${1?Missing relative post number}

  sed "${n}q;d" post/list
}


# Read field FIELD from post metadata recfile FILE.
pmeta()
{
  local -r file=${1?Missing file name}
  local -r field=${2?Missing field name}

  recsel -P "$field" "$file"
}


# Generate HTML for relative post number N (see `pnfile').
abstract-from()
{
  local -r file=${1?Missing post file name}

  local title date slug body
  title=$( pmeta "$file" subject )
  date=$( pmeta "$file" date )
  slug=$( pmeta "$file" slug )
  body=$( pmeta "$file" abstract )

  local -ri year=${date:0:4}

  if [ $year -ne $lastyear ]; then
    test $lastyear -eq 0 || echo '</section>'
    lastyear=$year

    cat <<EOF
<section class="compact">
<h1>$year</h1>
EOF
  fi

  cat <<EOF
<article class="abstract">
  <h2 class="title"><a href="$slug">$title</a></h2>
  $body
  <p class="date">Posted on $date.
    <a href="$slug">Read more &raquo;</a>
  </p>
</article>
EOF
}


# Generate posts page.
main()
{
  src/mkheader posts Posts

  local file
  while read file; do
    abstract-from "$file"
  done < post/list

  echo '</section><br class="end" />'

  cat src/footer.tpl.htm
}


main "$@"