148 lines
3.5 KiB
Bash
Executable File
148 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# This script builds every document in this repo,
|
|
# (handout and solutions, if they exist), and creates
|
|
# a zip of all resulting files.
|
|
|
|
# Where we're running this script
|
|
run_dir=$(pwd)
|
|
|
|
tectonic=$(pwd)/tectonic
|
|
|
|
# Output files
|
|
target_dir="${run_dir}/output"
|
|
target_zip="${run_dir}/output.zip"
|
|
|
|
# Clean up previous build
|
|
rm -drf "${target_dir}"
|
|
rm -f "${target_zip}"
|
|
|
|
# Build one document.
|
|
# Args: <target_dir> <job_name> <doc_dir> <main_file>
|
|
# target_dir: move output pdf to this directory
|
|
# job_name: name of this document. Output is saved as job_name.pdf
|
|
# doc_dir: cd here before building.
|
|
# main_file: build this tex file. Usually main.tex
|
|
function build() {
|
|
local b_target_dir="${1}"
|
|
local job_name="${2}"
|
|
local doc_dir="${3}"
|
|
local main_file="${4}"
|
|
|
|
echo "|> Building ${job_name}..."
|
|
cd "${doc_dir}"
|
|
|
|
tectonic_args=(
|
|
--chatter minimal
|
|
#--web-bundle "https://static.betalupi.com/tectonic/texlive2023.tar"
|
|
)
|
|
|
|
# Build handout
|
|
echo "\\def\\argNoSolutions{1}\\input{${main_file}}" |
|
|
"${tectonic}" \
|
|
"${tectonic_args[@]}" \
|
|
--outfmt pdf \
|
|
-
|
|
|
|
handout_stat=$?
|
|
|
|
if [[ $handout_stat == 0 ]]; then
|
|
mkdir -p "${b_target_dir}"
|
|
mv texput.pdf "${b_target_dir}/${job_name}.pdf"
|
|
else
|
|
rmdir --ignore-fail-on-non-empty "${b_target_dir}"
|
|
rm -f texput.pdf
|
|
echo "|> Handout build failed"
|
|
echo ""
|
|
fi
|
|
|
|
# Build solutions
|
|
echo "\\def\\argYesSolutions{1}\\input{${main_file}}" |
|
|
"${tectonic}" \
|
|
"${tectonic_args[@]}" \
|
|
--outfmt pdf \
|
|
-
|
|
|
|
solution_stat=$?
|
|
|
|
if [[ $solution_stat == 0 ]]; then
|
|
mkdir -p "${b_target_dir}"
|
|
mv texput.pdf "${b_target_dir}/${job_name}.sols.pdf"
|
|
else
|
|
rmdir --ignore-fail-on-non-empty "${b_target_dir}"
|
|
rm -f texput.pdf
|
|
echo "|> Solution build failed"
|
|
fi
|
|
|
|
# Clean up if files contents are identical
|
|
#if [[ $(cmp -bl "${b_target_dir}/${job_name}.sols.pdf" "${b_target_dir}/${job_name}.pdf" | wc -l) < 200 ]]; then
|
|
# echo "|> Versions identical, removing ${job_name}.sols.pdf"
|
|
# rm "${b_target_dir}/${job_name}.sols.pdf"
|
|
# solution_stat=1;
|
|
#fi
|
|
|
|
echo ""
|
|
|
|
if [[ $handout_stat == 0 ]]; then
|
|
(
|
|
echo -n "{"
|
|
echo -n "\"title\": \"${job_name}\"",
|
|
echo -n "\"type\": \"$(realpath --relative-to="${target_dir}" "${b_target_dir}")\"",
|
|
echo -n "\"description\": \"${job_name}\"",
|
|
echo -n "\"handout\": \"https://static.betalupi.com/ormc/$(realpath --relative-to="${target_dir}" "${b_target_dir}")/${job_name}.pdf\","
|
|
if [[ $solution_stat == 0 ]]; then
|
|
echo -n "\"solutions\": \"https://static.betalupi.com/ormc/$(realpath --relative-to="${target_dir}" "${b_target_dir}")/${job_name}.sols.pdf\","
|
|
fi
|
|
if [ -f "starred" ]; then
|
|
echo -n "\"starred\": true"
|
|
else
|
|
echo -n "\"starred\": false"
|
|
fi
|
|
echo -n "},"
|
|
) >>"$target_dir/index.json"
|
|
fi
|
|
cd "${run_dir}"
|
|
}
|
|
|
|
mkdir -p "${target_dir}"
|
|
echo -n "[" >"$target_dir/index.json"
|
|
|
|
for d in "${run_dir}/Misc/Warm-Ups"/*.tex; do
|
|
file="$(basename "${d}")"
|
|
build \
|
|
"${target_dir}/Warm-Ups" \
|
|
"${file%.*}" \
|
|
"${run_dir}/Misc/Warm-Ups" \
|
|
"${file}"
|
|
done
|
|
|
|
for d in "${run_dir}/Advanced"/*/; do
|
|
doc_dir=$(realpath "${d}")
|
|
job_name="$(basename "${doc_dir}")"
|
|
|
|
build \
|
|
"${target_dir}/Advanced" \
|
|
"${job_name}" \
|
|
"${doc_dir}" \
|
|
"main.tex"
|
|
done
|
|
|
|
for d in "${run_dir}/Intermediate"/*/; do
|
|
doc_dir=$(realpath "${d}")
|
|
job_name="$(basename "${doc_dir}")"
|
|
|
|
build \
|
|
"${target_dir}/Intermediate" \
|
|
"${job_name}" \
|
|
"${doc_dir}" \
|
|
"main.tex"
|
|
done
|
|
|
|
echo -n "{}]" >>"$target_dir/index.json"
|
|
|
|
# cd so paths in zip are relative
|
|
cd "${target_dir}"
|
|
|
|
zip -FSr "${target_zip}" .
|
|
zip -d "${target_zip}" "index.json" # We don't need this in the zip
|