From d52106454cb10a448ecc486bee1d8b9b92ab16cc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Apr 2023 17:58:46 -0300 Subject: v2: to rel="{prev,next}" in of collection items --- v2/src/bin/series | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100755 v2/src/bin/series (limited to 'v2/src/bin/series') 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 '' and '. + 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" -- cgit v1.2.3