#!/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"