Files
dela 5b24eba3c8 feat: fill test coverage gaps + fix \sdcol i18n labels
- examples/subst-chain.tex: substitution walkthrough with \sdbox/\sdsubst/\sdstep
- examples/antipatterns.tex: four compile-clean-but-teach-false figures
- tests/invalid/step-outside-row.tex, empty-row.tex, undeclared-role.tex,
  two-contrast-pkg.tex: negative fixtures for package-level warnings
- test.sh: add tests/invalid/ loop
- build.sh: allow superderive-build: allow directive to suppress
  intentional warnings in antipatterns galleries
- superderive.sty: \sdcol respects [en] option for illegal/legal labels
- references/api.md: complete rewrite, all ~12 macros documented
2026-08-22 10:13:36 +08:00

61 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# ./scripts/build.sh figure.tex [outdir]
set -euo pipefail
SRC="${1:?usage: build.sh figure.tex [outdir]}"
[[ -f "$SRC" ]] || { echo "no such file: $SRC" >&2; exit 2; }
SRCDIR="$(cd "$(dirname "$SRC")" && pwd)"
BASE="$(basename "$SRC" .tex)"
OUT="${2:-$SRCDIR/build}"
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
mkdir -p "$OUT"
if [[ "${SD_SKIP_LINT:-0}" != "1" ]]; then
echo "==> lint $BASE"
python3 "$ROOT/scripts/lint.py" "$SRC"
fi
echo "==> xelatex $BASE"
TEXINPUTS="$ROOT/assets:$SRCDIR:" \
xelatex -halt-on-error -interaction=nonstopmode \
-output-directory="$OUT" "$SRC" >/dev/null 2>&1 \
|| { echo "!! xelatex failed; last errors:" >&2
grep -n -A4 -m3 '^!' "$OUT/$BASE.log" >&2 || tail -30 "$OUT/$BASE.log" >&2
exit 1; }
LOG="$OUT/$BASE.log"
status=0
if grep -q "Missing character" "$LOG"; then
echo "!! missing glyphs:" >&2
grep -m5 "Missing character" "$LOG" >&2
status=1
fi
if grep -qE "^(Overfull|Underfull) \\\\[hv]box" "$LOG"; then
echo "!! overfull/underfull boxes:" >&2
grep -m5 -E "^(Overfull|Underfull) \\\\[hv]box" "$LOG" >&2
status=1
fi
if grep -q "Package superderive Warning" "$LOG"; then
if grep -q "^% superderive-build: allow" "$SRC"; then
echo " superderive warnings present (suppressed by superderive-build: allow)" >&2
else
echo "!! superderive warnings:" >&2
grep -m5 -A2 "Package superderive Warning" "$LOG" >&2
status=1
fi
fi
if command -v pdftocairo >/dev/null 2>&1; then
echo "==> exporting svg / png"
pdftocairo -svg "$OUT/$BASE.pdf" "$OUT/$BASE.svg"
pdftocairo -png -r 300 -singlefile "$OUT/$BASE.pdf" "$OUT/$BASE"
pdftocairo -png -r 300 -singlefile -transp "$OUT/$BASE.pdf" "$OUT/$BASE-alpha"
pdftocairo -png -scale-to-x 360 -scale-to-y -1 -singlefile \
"$OUT/$BASE.pdf" "$OUT/$BASE-thumb"
else
echo "!! pdftocairo missing: PDF only" >&2
status=1
fi
echo "==> artifacts in $OUT"
ls -1 "$OUT/$BASE"*.{pdf,svg,png} 2>/dev/null | sed 's/^/ /'
exit $status