#!/bin/sh -e
f='
ssg.html
ssg/ssg.png
ssg/ssg.sh
ssg/txt2img.sh
ssg/ssg.test.sh
ssg/.ssg.sitemap.sh
ssg/.ssg.logo.sh
ssg/.ssg.example.sh
'
test $# -ne 2 && { echo "$f" && exit; }
SRC="$1"
DST="$2"
ssg_png="$DST/ssg/ssg.png"
mkdir -p "$DST/ssg"
echo '' > "$DST/ssg.html"
cp "$SRC/.ssg.sitemap.sh" "$DST/ssg/.ssg.sitemap.sh"
cp "$SRC/.ssg.logo.sh" "$DST/ssg/.ssg.logo.sh"
cp "$SRC/ssg/.ssg.sh" "$DST/ssg/.ssg.example.sh"
cp "$(which ssg.sh)" "$DST/ssg/ssg.sh"
cp "$(which txt2img.sh)" "$DST/ssg/txt2img.sh"
cp "$(which ssg.test.sh)" "$DST/ssg/ssg.test.sh"
if command -v magick >/dev/null 2>&1; then im='magick'; else im='convert'; fi
create_image() {
"$im" \
-background black \
-fill white \
-font 'spleen-6x12' \
-pointsize 12 \
-size '480x' \
-gravity northwest \
label:@- \
-depth 1 \
"$1"
}
cut_pages() {
pages=$1
out=$2
content=$(cat)
total=$(echo "$content" | wc -l)
per=$(((total + pages - 1) / pages))
i=1
while test "$i" -le "$pages"; do
start=$(((i - 1) * per + 1))
end=$((i * per))
page=$(echo "$content" | sed -n "${start},${end}p")
# shellcheck disable=2059
printf '%s\n' "$page" | create_image "$(printf "$out" "$i")"
i=$((i + 1))
done
}
tile_pages() {
o="$1" && shift
montage "$@" -tile x1 -geometry +0+0 -gravity north -background black "$o"
}
rm_pages() { rm -f "$@"; }
trim() { "$im" "$1" -trim +repage "$1"; }
optimize_png() { pngquant --strip --force --ext .png "$1"; }
cut_pages 4 "$DST/ssg/ssg_%d.png" <"$DST/ssg/ssg.sh"
tile_pages "$ssg_png" "$DST"/ssg/ssg_*.png
rm_pages "$DST"/ssg/ssg_*.png
trim "$ssg_png"
optimize_png "$ssg_png"
echo "$f"