blob: 67123684774317d9f50318fa6563e93e1710f3dc (
plain) (
tree)
|
|
#!/bin/sh
set -eu
usage() {
cat <<-'EOF'
Usage:
series FILENAME
series -h
EOF
}
help() {
cat <<-'EOF'
Options:
-h, --help show this message
FILENAME the sentinel file to be touched
Enumerate and sort all items of a collection type, and notify
them about their '<link rel="next" ... />' and '<link rel="prev" .../>.
The collection type and language are inferred by FILENAME.
The "notifying" part is done via a "$TARGET.next" file, that
is, a ".next" file is created to notify "$TARGET" about which
item is next to it via the content of the file. The same
applies for ".prev" files.
Examples:
Generate the ".next" and ".prev" files for english pastebins:
$ index src/en/pastebin/index.series
EOF
}
for flag in "$@"; do
case "$flag" in
--)
break
;;
--help)
usage
help
exit
;;
*)
;;
esac
done
while getopts 'h' flag; do
case "$flag" in
h)
usage
help
exit
;;
*)
usage >&2
exit 2
;;
esac
done
shift $((OPTIND - 1))
. src/lib.sh
FILENAME="${1:-}"
eval "$(assert_arg "$FILENAME" 'FILENAME')"
DIR="$(dirname "$FILENAME")"
find "$DIR"/*.sortdata 2>/dev/null |
sort -n |
xargs cat |
awk '
BEGIN { split("", items) }
{ items[NR] = $0 }
END {
first = 1
last = length(items)
for (i in items) {
item = items[i]
if (i != first) {
file = item ".prev"
prev = items[i-1]
print prev > file
}
if (i != last) {
file = item ".next"
nextt = items[i+1]
print nextt > file
}
}
}
'
touch "$FILENAME"
|