#!/bin/sh
# groff-install-font.sh - (c) 2023 Walter Alejandro Iglesias
#
# Convert and install OTF, TTF or PFA font to use it with Groff.  You need
# fontforge installed.

# Directory where you want the font installed (a custom path needs to
# be added to GROFF_FONT_PATH).  To install the font in the default
# system wide groff location just leave this empty (you'll need to run
# this script as root in this case).
sitefont=$HOME/.local/share/groff/site-font

prefix=/usr/local/share/groff

if [ "`uname`" = "Linux" ]; then
	prefix=/usr/share/groff
fi
if [ "$sitefont" = "" ]; then
	sitefont=$prefix/site-font
	if [ "`whoami`" != "root" ]; then
		echo "You must be root to install the font in $sitefont"
		exit 1
	fi
elif [ ! -d $sitefont/devps ] || [ ! -d $sitefont/devpdf ]; then
	mkdir -p $sitefont/dev{ps,pdf}
fi
if ! echo $1 | grep -E '.*(R|I|B|BI)+$' ||
   ! echo $2 | grep -E '\.(otf|ttf|pfb)$'; then
	echo "Usage: `basename $0` <groffname> <fontfile>.(otf|ttf|pfb)"
	echo "  groffname must be <name>(R|I|B|BI)"
	exit 1
fi
which fontforge >/dev/null 2>&1 || {
	echo "This script uses fontforge to convert fonts"
	exit 1
}
textmap=$prefix/current/font/devps/generate/textmap
enc=$prefix/current/font/devps/text.enc
groffname=$1
font=$2
name=`basename "$font" | sed -E 's/\.(otf|ttf|pfb)$//'`

fontforge -lang=ff -c "Open(\"$font\");Generate(\"$name.pfa\");"
fontforge -lang=ff -c "Open(\"$font\");Generate(\"$name.t42\");"
afmtodit -e $enc $name.afm $textmap $groffname
if ! grep -q '^ligatures' $groffname ; then
	sed -i '/kernpairs/i\
ligatures fi fl 0\
\
' $groffname
fi
mv $name.t42 $groffname $sitefont/devps
mv $name.pfa $sitefont/devpdf
rm $name.afm
ln -s $sitefont/devps/$groffname $sitefont/devpdf/$groffname
printf "$name\t$name.t42\n" >> $sitefont/devps/download
printf "\t$name\t$name.pfa\n" >> $sitefont/devpdf/download

# End of groff-install-font.sh
