mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-05 19:28:39 +00:00
* Modernize font creation * Automate the build process, instead of writing a complicated manual * Update sources used by the docker image away from google code * Exclude MathJax-dev checkout from docker image, to allow image reuse * Try to keep the individual image layers small by combining RUN commands and removing temporary files used only during each individual step * Allow creating fonts from local directory Also use hash of Dockerfile to compute image tag, in order to ensure creation of a new image if the Dockerfile changes. * make glob syntax work on MacOS
149 lines
3.9 KiB
Bash
Executable File
149 lines
3.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
shopt -s extglob
|
|
|
|
usage() {
|
|
while [[ $# -gt 1 ]]; do
|
|
echo "$1" >&2
|
|
shift
|
|
done
|
|
echo "Usage: ${0##*/} [OPTIONS] [SOURCE]"
|
|
echo ""
|
|
echo "SOURCE may be"
|
|
echo " - a URL for a tarball, or"
|
|
echo " - a local tarball file, or"
|
|
echo " - a local directory"
|
|
echo "with a layout compatible to MathJax-dev."
|
|
echo "It defaults to ${URL}"
|
|
echo ""
|
|
echo "OPTIONS:"
|
|
echo " -h|--help display this help"
|
|
echo " --image NAME:TAG use the named docker image [$IMAGE]"
|
|
exit $1
|
|
}
|
|
|
|
used_fonts=(
|
|
KaTeX_AMS-Regular
|
|
KaTeX_Caligraphic-Bold
|
|
KaTeX_Caligraphic-Regular
|
|
KaTeX_Fraktur-Bold
|
|
KaTeX_Fraktur-Regular
|
|
KaTeX_Main-Bold
|
|
KaTeX_Main-Italic
|
|
KaTeX_Main-Regular
|
|
KaTeX_Math-BoldItalic
|
|
KaTeX_Math-Italic
|
|
KaTeX_Math-Regular
|
|
KaTeX_SansSerif-Bold
|
|
KaTeX_SansSerif-Italic
|
|
KaTeX_SansSerif-Regular
|
|
KaTeX_Script-Regular
|
|
KaTeX_Size1-Regular
|
|
KaTeX_Size2-Regular
|
|
KaTeX_Size3-Regular
|
|
KaTeX_Size4-Regular
|
|
KaTeX_Typewriter-Regular
|
|
)
|
|
|
|
filetypes=( ttf eot woff woff2 )
|
|
|
|
set -e
|
|
cd "$(dirname "$0")"
|
|
|
|
cleanup() {
|
|
[[ "${CONTAINER}" ]] \
|
|
&& docker stop "${CONTAINER}" >/dev/null \
|
|
&& docker rm "${CONTAINER}" >/dev/null
|
|
CONTAINER=
|
|
[[ -f "${TMPFILE}" ]] && rm "${TMPFILE}"
|
|
TMPFILE=
|
|
}
|
|
CONTAINER=
|
|
trap cleanup EXIT
|
|
|
|
IMAGE="katex/fonts:DF-$(openssl sha1 Dockerfile | tail -c 9)"
|
|
URL=https://github.com/Khan/MathJax-dev/archive/master.tar.gz
|
|
TMPFILE=
|
|
FILE=
|
|
NARGS=0
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-h|--help)
|
|
usage 0
|
|
;;
|
|
--image=*)
|
|
IMAGE="${1#*=}"
|
|
;;
|
|
--image)
|
|
shift
|
|
IMAGE="$1"
|
|
;;
|
|
-*)
|
|
usage "Invalid option: $1" "" 1
|
|
;;
|
|
*)
|
|
case $NARGS in
|
|
0)
|
|
if [[ -d "$1" ]]; then
|
|
TMPFILE="$(mktemp "${TMPDIR:-/tmp}/mjf.XXXXXXXX")"
|
|
FILE="$TMPFILE"
|
|
pushd "$1"
|
|
if [[ ! -f fonts/OTF/TeX/Makefile ]]; then
|
|
echo "$1 does not look like MathJax-dev" >&2
|
|
exit 1
|
|
fi
|
|
tar cf "$FILE" Makefile default.cfg fonts/OTF/TeX
|
|
popd
|
|
elif [[ -f "$1" ]]; then
|
|
FILE="$1"
|
|
elif [[ "$1" = http?(s)://* ]]; then
|
|
URL="$1"
|
|
else
|
|
echo "'$1' is not a valid source" >&2
|
|
exit 1
|
|
fi
|
|
NARGS=1
|
|
;;
|
|
*)
|
|
usage "Too many arguments: $1" "" 1
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
# build image if missing
|
|
if [[ $(docker images "$IMAGE" | wc -l) -lt 2 ]]; then
|
|
echo "Need to build docker image $IMAGE"
|
|
docker build --tag "$IMAGE" .
|
|
fi
|
|
|
|
CMDS="set -ex
|
|
test -f MathJax-dev.tar.gz || wget -O MathJax-dev.tar.gz '${URL}'
|
|
mk=\$(tar tf MathJax-dev.tar.gz | grep 'fonts/OTF/TeX/Makefile\$')
|
|
tar xf MathJax-dev.tar.gz
|
|
cd \"\${mk%fonts/*}\"
|
|
cp default.cfg custom.cfg
|
|
make custom.cfg.pl
|
|
make -C fonts/OTF/TeX ${filetypes[*]}
|
|
tar cf /fonts.tar ${filetypes[*]/#/fonts/OTF/TeX/}"
|
|
|
|
echo "Creating and starting docker container from image $IMAGE"
|
|
CONTAINER=$(docker create "$IMAGE" /bin/sh -c "${CMDS}")
|
|
if [[ ${FILE} ]]; then
|
|
docker cp "${FILE}" $CONTAINER:/MathJax-dev.tar.gz
|
|
fi
|
|
docker start --attach $CONTAINER
|
|
docker cp $CONTAINER:/fonts.tar .
|
|
cleanup
|
|
echo "Docker executed successfully, will now unpack the fonts"
|
|
|
|
tar xf fonts.tar
|
|
for filetype in "${filetypes[@]}"; do
|
|
for font in "${used_fonts[@]}"; do
|
|
echo "$filetype/$font"
|
|
mv "fonts/OTF/TeX/$filetype/$font".* ../../static/fonts/
|
|
done
|
|
done
|
|
rm -rf fonts fonts.tar
|