diff options
Diffstat (limited to '')
-rwxr-xr-x | v2/src/bin/series | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/v2/src/bin/series b/v2/src/bin/series new file mode 100755 index 0000000..6712368 --- /dev/null +++ b/v2/src/bin/series @@ -0,0 +1,102 @@ +#!/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" |