2026-07-23 05:48:43 +04:00
|
|
|
#!/usr/bin/env bash
|
2026-07-25 16:51:05 +04:00
|
|
|
# Generate the HTML/PDF export(s) from any .adoc document (README.adoc by default).
|
2026-07-23 05:48:43 +04:00
|
|
|
#
|
2026-07-25 16:51:05 +04:00
|
|
|
# docs/generate-readme-pdf.sh # README.html + README.pdf
|
|
|
|
|
# docs/generate-readme-pdf.sh --html # README.html only
|
|
|
|
|
# docs/generate-readme-pdf.sh --pdf # README.pdf only
|
|
|
|
|
# docs/generate-readme-pdf.sh DEPLOY.adoc # DEPLOY.html + DEPLOY.pdf
|
|
|
|
|
# docs/generate-readme-pdf.sh DEPLOY.adoc --pdf # DEPLOY.pdf only
|
2026-07-23 05:48:43 +04:00
|
|
|
#
|
2026-07-25 16:51:05 +04:00
|
|
|
# Outputs land in the project root (named after the source) and are Git-ignored.
|
2026-07-23 05:48:43 +04:00
|
|
|
#
|
|
|
|
|
# Requirements:
|
|
|
|
|
# - asciidoctor (e.g. gem install asciidoctor)
|
|
|
|
|
# - chromium (headless PDF rendering)
|
|
|
|
|
# - fonts-noto-color-emoji (color emoji in the PDF)
|
|
|
|
|
#
|
|
|
|
|
# Why Chromium instead of asciidoctor-pdf (used by the VSCodium extension)?
|
|
|
|
|
# Its Prawn engine cannot embed color-emoji fonts (CBDT/COLR), so emoji
|
|
|
|
|
# disappear. Chromium handles them fine as long as "Noto Color Emoji"
|
|
|
|
|
# is installed. The docs/docinfo.html stylesheet (emoji fallback + print
|
|
|
|
|
# rules) is injected only for this build, via Asciidoctor's docinfo
|
|
|
|
|
# mechanism, and adapts the layout for print (TOC in flow, table/page
|
|
|
|
|
# breaks, wrapped code listings).
|
|
|
|
|
|
|
|
|
|
set -euo pipefail
|
|
|
|
|
|
2026-07-25 16:51:05 +04:00
|
|
|
cd "$(dirname "$0")/.." || exit 1
|
2026-07-23 05:48:43 +04:00
|
|
|
|
2026-07-25 16:51:05 +04:00
|
|
|
SRC="README.adoc"
|
|
|
|
|
MODE="--all"
|
|
|
|
|
|
|
|
|
|
for arg in "$@"; do
|
|
|
|
|
case "$arg" in
|
|
|
|
|
--html|--pdf|--all)
|
|
|
|
|
MODE="$arg"
|
|
|
|
|
;;
|
|
|
|
|
-h|--help)
|
|
|
|
|
sed -n '2,12p' "$0"
|
|
|
|
|
exit 0
|
|
|
|
|
;;
|
|
|
|
|
*.adoc)
|
|
|
|
|
SRC="$arg"
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
echo "Usage: $0 [fichier.adoc] [--html|--pdf|--all]" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
;;
|
|
|
|
|
esac
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [[ ! -f "$SRC" ]]; then
|
|
|
|
|
echo "Erreur : fichier introuvable : $SRC" >&2
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
BASE="$(basename "$SRC" .adoc)"
|
|
|
|
|
HTML_OUT="$BASE.html"
|
|
|
|
|
PDF_OUT="$BASE.pdf"
|
2026-07-23 05:48:43 +04:00
|
|
|
|
|
|
|
|
build_html() {
|
2026-07-25 16:51:05 +04:00
|
|
|
asciidoctor -b html5 -a docinfodir=docs -a docinfo=shared "$SRC" -o "$1"
|
2026-07-23 05:48:43 +04:00
|
|
|
echo "HTML generated: $1"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
build_pdf() {
|
|
|
|
|
# Resolve to an absolute path for the file:// URL
|
|
|
|
|
local html_path="$1"
|
|
|
|
|
[[ "$html_path" != /* ]] && html_path="$PWD/$html_path"
|
|
|
|
|
chromium --headless --disable-gpu --no-sandbox \
|
|
|
|
|
--no-pdf-header-footer \
|
|
|
|
|
--print-to-pdf="$PDF_OUT" \
|
|
|
|
|
"file://$html_path"
|
|
|
|
|
echo "PDF generated: $PDF_OUT"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case "$MODE" in
|
|
|
|
|
--html)
|
|
|
|
|
build_html "$HTML_OUT"
|
|
|
|
|
;;
|
|
|
|
|
--pdf)
|
|
|
|
|
TMP_HTML="$(mktemp --suffix=.html)"
|
|
|
|
|
trap 'rm -f "$TMP_HTML"' EXIT
|
|
|
|
|
build_html "$TMP_HTML" >/dev/null
|
|
|
|
|
build_pdf "$TMP_HTML"
|
|
|
|
|
;;
|
|
|
|
|
--all)
|
|
|
|
|
build_html "$HTML_OUT"
|
|
|
|
|
build_pdf "$HTML_OUT"
|
|
|
|
|
;;
|
|
|
|
|
esac
|