joeylib2/scripts/build-docs.sh

68 lines
2.3 KiB
Bash
Executable file

#!/usr/bin/env bash
# Part of JoeyLib, Copyright (c) 2026 Scott Duensing, under the MIT License.
# See LICENSE.md for license information.
# SPDX-License-Identifier: MIT
#
# build-docs.sh - render the JoeyLib manual to HTML and PDF.
#
# Sources are docs/Manual.adoc plus the chapter files it includes, all in
# docs/. Output goes to build/docs/, which is gitignored along with the rest
# of build/ -- the .adoc sources are the tracked deliverable, the rendered
# books are regenerated on demand.
#
# The HTML is built with -a data-uri so pictures are embedded and the page is
# a single self-contained file that can be copied anywhere without an images
# folder beside it.
#
# The HTML build fails if any code it shows holds a character that is not
# ASCII (tests/gate/checkDocsCode.c): Asciidoctor turns `->` into an arrow
# and `...` into an ellipsis even in a code span, so write those as `+text+`.
#
# Usage: scripts/build-docs.sh [html|pdf]
# with no argument, both.
# Requires: asciidoctor and asciidoctor-pdf
# gem install asciidoctor asciidoctor-pdf rouge
set -euo pipefail
repo=$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)
# shellcheck source=scripts/lib/joeyEnv.sh
source "$repo/scripts/lib/joeyEnv.sh"
src=$repo/docs/Manual.adoc
out=$repo/build/docs
what=${1:-both}
case "$what" in
html|pdf|both) ;;
*) echo "usage: $0 [html|pdf]" >&2; exit 2 ;;
esac
[ -f "$src" ] || { echo "build-docs: missing $src" >&2; exit 2; }
need=(asciidoctor)
[ "$what" = "html" ] || need+=(asciidoctor-pdf)
for tool in "${need[@]}"; do
command -v "$tool" >/dev/null || {
echo "build-docs: $tool not found (gem install asciidoctor asciidoctor-pdf rouge)" >&2
exit 2
}
done
mkdir -p "$out"
# -a allow-uri-read lets the SVG cover image be read from assets/.
common=(-a "revdate=$(date +%Y-%m-%d)" -a allow-uri-read)
if [ "$what" = "html" ] || [ "$what" = "both" ]; then
asciidoctor "${common[@]}" -a data-uri \
"$src" -o "$out/JoeyLib-Manual.html"
"$(joeyTool checkDocsCode)" "$out/JoeyLib-Manual.html"
echo "build-docs: $out/JoeyLib-Manual.html"
fi
if [ "$what" = "pdf" ] || [ "$what" = "both" ]; then
asciidoctor-pdf "${common[@]}" \
"$src" -o "$out/JoeyLib-Manual.pdf"
echo "build-docs: $out/JoeyLib-Manual.pdf"
fi
ls -la "$out"