-
-
Save torbiak/3352fe1f559dbfbf99d6f5704adf442e to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash | |
# groff-install-ttf converts a TrueType (ttf) or OpenType (otf) font to a | |
# Printer Font ASCII (pfa) font and a groff font (ditroff) and installs them to | |
# groff's site-font directory. | |
# | |
# Requires fontforge. | |
# | |
# You're the best, Peter Schaffter, but contrary to the verbose and | |
# difficult-to-follow http://www.schaffter.ca/mom/momdoc/appendices.html#fonts, | |
# the t42 file doesn't seem to be necessary, at least with recent versions of | |
# groff. Just copy the groff font and pfa generated by fontforge to both | |
# site-font device directories (devps, devpdf) and update the "download" files | |
# with the internalname -> <pfa> mapping. | |
# | |
# Note that "groffname" needs to match groff's conventions for font styles. | |
# Regular should end with "R", bold with "B", etc. | |
set -eu | |
font=${1:?No font file given}; shift | |
groffname=${1:?No groff font name given, eg TimesR, TimesI, TimesB, etc}; shift | |
name=$(basename "$font" .${font##*.}) | |
prefix=/usr/share/groff | |
fontdir=$prefix/current/font | |
textmap=$fontdir/devps/generate/textmap | |
sitefont=$prefix/site-font | |
trap cleanup EXIT | |
cleanup() { | |
rm -f "$groffname" "$name.pfa" | |
} | |
fontforge -lang=ff -c "Open(\"$font\");Generate(\"$name.pfa\");" | |
afmtodit "$name.afm" "$textmap" "$groffname" | |
mkdir -p "$sitefont" | |
for dir in "$sitefont"/dev{ps,pdf}; do | |
mkdir -p "$dir" | |
cp "$name.pfa" "$groffname" "$dir" | |
done | |
internalname=$(awk '/^internalname/ {print $2}' "$groffname") | |
echo -e "$internalname\t$name.pfa" >>"$fontdir/devps/download" | |
echo -e "\t$internalname\t$name.pfa" >>"$fontdir/devpdf/download" |
Hi Thx for the great work.
Finally can start using groff with some other fonts.
For some reason, it isn’t working for me. :-(
~/DPSD-beyond$ ls DPSDbeyond.otf dpsdbeyond.zip groff-install-font SIL Open Font License.txt ~/DPSD-beyond$ ./groff-install-font DPSDbeyond.otf DPSDbeyond Copyright (c) 2000-2012 by George Williams. Executable based on sources from 14:57 GMT 31-Jul-2012-ML. Library based on sources from 14:57 GMT 31-Jul-2012. The requested file, DPSDbeyond.otf, does not exist Open: Failed to open: DPSDbeyond.otf Called from... <command-string>: line 1 ~/DPSD-beyond$
I have the same issue: Running Arch Linux 5.6.11, Fonforge20200314
@cogburnd02 @dj-bauer: Yeah, there was a silly bug. I was changing to a temp dir so I could put the files generated by fontforge in their own place so I could clean up completely without the chance of deleting/overwriting a file that someone happened to give the same name, but then the ttf/otf filepath needed to be absolute. I've changed it so the files are generated in the working dir instead.
Thanks! Now it works like a charm :)
You're the best, Peter Schaffter, but contrary to the verbose and
difficult-to-follow http://www.schaffter.ca/mom/momdoc/appendices.html#fonts,
the t42 file doesn't seem to be necessary, at least with recent versions of
groff. Just copy the groff font and pfa generated by fontforge to both
site-font device directories (devps, devpdf) and update the "download" files
with the internalname -> mapping.
TrueType -> Type 42 conversion is lossless, TrueType -> Type 1 isn't. That's the reason why Peter's guide is using .t42
files.
@xenu ah, thanks. The PostScript fonts Wikipedia page describes various font types. Type 42 is a PostScript wrapper around TrueType.
It's probably better to use install-font.sh, referenced from the groff manual, instead of this script. install-font.sh
is baroque but it deals with a bunch of issues that I'm ignorant of.
I think the shebang "/usr/bin/env bash" leads to a problem with the echo flag -e.
Reset it to /usr/bin/bash or /bin/bash (for my Ubuntu Linux).
Also I unpacked the for iteration to make it work:
for dir in "$sitefont"/devps "$sitefont"/devpdf; do
Otherwise the bash script worked well, thank you for sharing it.
For some reason, it isn’t working for me. :-(