aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/process-includes.sh
diff options
context:
space:
mode:
Diffstat (limited to 'doc/manual/process-includes.sh')
-rwxr-xr-xdoc/manual/process-includes.sh32
1 files changed, 32 insertions, 0 deletions
diff --git a/doc/manual/process-includes.sh b/doc/manual/process-includes.sh
new file mode 100755
index 000000000..51ac67acb
--- /dev/null
+++ b/doc/manual/process-includes.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+set -euo pipefail
+
+infile="$1"
+outfile="$2"
+shift 2
+
+# set a search path for includes. the old makefile-based system splorked
+# everything into the source tree and was thus able to not have a search
+# path, but the meson system generates intermediate files into dedicated
+# directories separate from the source. we still retain the implicit old
+# behavior for now as the base search path, once meson is the default we
+# can revisit this and remove the implicit search path entry. it's fine.
+set -- "$(dirname "$infile")" "$@"
+
+# re-implement mdBook's include directive to make it usable for terminal output and for proper @docroot@ substitution
+(grep '{{#include' "$infile" || true) | while read -r line; do
+ found=false
+ include="$(printf "$line" | sed 's/{{#include \(.*\)}}/\1/')"
+ for path in "$@"; do
+ filename="$path/$include"
+ if [ -e "$filename" ]; then
+ found=true
+ matchline="$(printf "$line" | sed 's|/|\\/|g')"
+ sed -i "/$matchline/r $filename" "$outfile"
+ sed -i "s/$matchline//" "$outfile"
+ break
+ fi
+ done
+ $found || ( echo "#include-d file '$filename' does not exist." >&2; exit 1; )
+done