#!/bin/bash
#
# makefont - Font Builder for vazir-font (github)
# Written in 2015-2020 by Saber Rasetikerdar <saber.rastikerdar@gmail.com>
# Works only on linux.
#
# Requirements:
#     ./make-instances.sh
#     ./build.py
#     ttfautohint  https://www.freetype.org/ttfautohint/
#     sfnt2woff-zopfli  https://github.com/bramstein/sfnt2woff-zopfli
#     mkeot  https://www.w3.org/Tools/eot-utils/
#     woff2_compress  https://github.com/google/woff2
#     zip
#     ./make-variable.sh
#
# Run:
# $ makefont github-vazir-directory
#

WORKINGDIR="$1"
SCRIPTDIR=`dirname "$0"`

if [ ! -f "${SCRIPTDIR}/build.conf" ]; then
    echo "build.conf not found!"
    exit 1
fi

source "${SCRIPTDIR}/build.conf"

TEMPDIR="/tmp/font-output-temp"
SOURCEDIR="${WORKINGDIR}/source"
LATINDIR="${WORKINGDIR}/latin"
DISTDIR="${WORKINGDIR}/dist"
BUILDCMD="${SCRIPTDIR}"/build.py
LATINCOPYRIGHT="${LATINCOPYRIGHT}"
UIARGS="${UIARGS}"

if [ ! -d "${WORKINGDIR}" ]; then
    echo "WORKINGDIR not found!"
    exit 1
fi

if [ ! -f "${BUILDCMD}" ]; then
    echo "BUILDCMD not found!"
    exit 1
fi

if [ ! -d "${SOURCEDIR}" ]; then
    echo "SOURCEDIR not found!"
    exit 1
fi

rm -rf "${TEMPDIR}"
mkdir -p "${TEMPDIR}"
mkdir "${TEMPDIR}"/build

if [ ! -d "${TEMPDIR}"/build ]; then
    echo "TEMPDIR/build not found!"
    exit 1
fi

# Make ttf instances 
echo "-> making instances"
if ! "${SCRIPTDIR}/make-instances.sh" "${SOURCEDIR}" "${TEMPDIR}/build" ; then
    exit 1
fi


# Make variable ttf
echo "-> making variable"
if ! "${SCRIPTDIR}/make-variable.sh" "${SOURCEDIR}" "${TEMPDIR}/build" ; then
    exit 1
fi

# Make all the possible versions
for ((i=0;i<${#SOURCEFILES[@]};++i));
do
  sf="${TEMPDIR}/build/${SOURCEFILES[i]}"
  lf="${LATINDIR}"/"${LATINFILES[i]}"
  bn=$(basename ${sf})
  filename="${bn%.*}"
  if [ -f "${sf}" ]; then  
    "${BUILDCMD}" --input="${sf}" --output="${TEMPDIR}/build/${filename}-WOL.ttf"
    "${BUILDCMD}" --input="${sf}" --output="${TEMPDIR}/build/${filename}-WOL-UI.ttf" --ui-args=$UIARGS
    "${BUILDCMD}" --input="${sf}" --output="${TEMPDIR}/build/${filename}-FD-WOL.ttf" --farsi-digits
    "${BUILDCMD}" --input="${sf}" --output="${TEMPDIR}/build/${filename}-FD-WOL-UI.ttf" --farsi-digits --ui-args=$UIARGS
    if [ -f "${lf}" ]; then  
      "${BUILDCMD}" --input="${sf}" --latin="${lf}" --latin-copyright="${LATINCOPYRIGHT}" --output="${TEMPDIR}/build/${filename}.ttf"
      "${BUILDCMD}" --input="${sf}" --latin="${lf}" --latin-copyright="${LATINCOPYRIGHT}" --output="${TEMPDIR}/build/${filename}-UI.ttf" --ui-args=$UIARGS
      "${BUILDCMD}" --input="${sf}" --latin="${lf}" --latin-copyright="${LATINCOPYRIGHT}" --output="${TEMPDIR}/build/${filename}-FD.ttf" --farsi-digits
      "${BUILDCMD}" --input="${sf}" --latin="${lf}" --latin-copyright="${LATINCOPYRIGHT}" --output="${TEMPDIR}/build/${filename}-FD-UI.ttf" --farsi-digits --ui-args=$UIARGS
    fi
  fi 
done

# Make all file types
for f in "${TEMPDIR}"/build/*.ttf
do
  if [ -f "${f}" ]; then
    fn=$(basename "${f}")
    ttfautohint -n -W -D arab -f latn -G 200 -l 50 -r 200 "${f}" "${TEMPDIR}/${fn}"
    #sfnt2woff "${TEMPDIR}/${fn}"
    sfnt2woff-zopfli "${TEMPDIR}/${fn}"
    mkeot "${TEMPDIR}/${fn}" > "${TEMPDIR}/${fn%%.*}".eot
    woff2_compress "${TEMPDIR}/${fn}"
  fi 
done
rm -rf "${TEMPDIR}"/build

# Move files to where they belong to
mkdir "${TEMPDIR}/UI"

mkdir "${TEMPDIR}/UI/Farsi-Digits-Without-Latin"
mv "${TEMPDIR}"/*FD-WOL-UI* "${TEMPDIR}/UI/Farsi-Digits-Without-Latin"
mkdir "${TEMPDIR}/Farsi-Digits-Without-Latin"
mv "${TEMPDIR}"/*FD-WOL* "${TEMPDIR}/Farsi-Digits-Without-Latin"

mkdir "${TEMPDIR}/UI/Farsi-Digits"
mv "${TEMPDIR}"/*FD-UI* "${TEMPDIR}/UI/Farsi-Digits"
mkdir "${TEMPDIR}/Farsi-Digits"
mv "${TEMPDIR}"/*FD* "${TEMPDIR}/Farsi-Digits"

mkdir "${TEMPDIR}/UI/Without-Latin"
mv "${TEMPDIR}"/*WOL-UI* "${TEMPDIR}/UI/Without-Latin"
mkdir "${TEMPDIR}/Without-Latin"
mv "${TEMPDIR}"/*WOL* "${TEMPDIR}/Without-Latin"

mv "${TEMPDIR}"/*UI* "${TEMPDIR}/UI"

# Add other(license, readme, ...) files defined in build.conf
for ((i=0;i<${#ADDFILES[@]};++i));
do
  cp "${ADDFILES[i]}" "${TEMPDIR}"
done

# Make the release package(zip)
rm -f "$RELEASEFILEPATH"
CURDIR=`pwd`
cd "${TEMPDIR}"
zip -r release.zip .
cd "$CURDIR"
mv "${TEMPDIR}"/release.zip "$RELEASEFILEPATH"

# Make folder "dist"
mkdir -p "${DISTDIR}"
cp -rf "${TEMPDIR}"/**/ "${DISTDIR}"
cp -rf "${TEMPDIR}"/*.woff "${DISTDIR}"
cp -rf "${TEMPDIR}"/*.woff2 "${DISTDIR}"
cp -rf "${TEMPDIR}"/*.ttf "${DISTDIR}"
cp -rf "${TEMPDIR}"/*.eot "${DISTDIR}"

# Clean up
rm -rf "${TEMPDIR}"
