lout-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

use windows fonts and adobe distiller and lout


From: douglas mcallaster
Subject: use windows fonts and adobe distiller and lout
Date: Tue, 28 Jan 2020 17:33:49 -0500

Folks,

Can lout use the truetype fonts which come with Windows 10?
(And I am using Adobe Distiller to make pdf from the lout generated postscript.)

I found an explanation for using non standard fonts from 20 years ago (using PFA or PFB and AFM files),
but I assume truetype fonts would provide much higher quality.

I discovered (on git hub) a script from Martin Michel from 2014 but it is for Linux and ghostscript.
Has someone made a Windows powershell script which could perform this magic for me?

Or perhaps someone could explain the script (copied next under) so that I could try to its steps manually.
 
As I understand it, I would have to set up lout to find the AFM file via a myfonts.ld file.

If someone could reply with the requisite (I assume) AFM file (based on some Windows10 truetype font),
and a myfonts.ld file (with the correct matching @name, @family, @face, @tag, @metrics, @mapping info)
what would be really great. (An early success would keep me going, as I have a day job.)

Also, if folks have done this and can suggest a nice Windows Monospace, Serif, and San Serif font, I welcome it.

Finally, my thoughts go out to Dr Kingston, who enjoyed hiking in Australia,
as I wonder how much of his treasured woodlands are now destroyed.

Thanks, Doug

#!/bin/bash
#
# addfonts.sh
# Converts True Type or Open Type Fonts to Postscript Type1 Fonts and populates
# the Ghostscript Fontmap file and the Basser Lout FontDef databases for local
# users.
#
# Depends on non-standard commands: ttfpt1 (compiled against Freetype)
#
#
# Copyright 2014 Martin Michel
#
#   Licensed under the Apache License, Version 2.0 (the "License"); you may not
#   use this file except in compliance with the License.  You may obtain a copy
#   of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
#   WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
#   License for the specific language governing permissions and limitations
#   under the License.
   
shfile=$(sed 's/^.*\///' <<< $0)
logfile=$(sed -e 's/\.sh/\.log/; s/^.*\///' <<< $0)
#echo $0 $shfile $logfile

usage="Usage: ./$shfile
No arguments applicable. This script scans for new True Type or Open Type Font
files, converts them to Postscript Type1 Fonts and updates the Fontmap
(Ghostscript) and @FontDef (Lout) databases. The script and all associated input
and output files must be in the local user ghostscript font path."

echo "*****************************************************************"\
   >>$logfile
echo "LOG ENTRY from '$shfile'">>$logfile
echo -e "Run by $USER on $HOSTNAME at $(date) \n ">>$logfile

if [ $# -gt 0 ] ; then
    echo -e "TERMINATION: Wrong number of arguments. \n" |tee -a $logfile
    echo -e "$usage\n"
    exit 1
fi

if [[ "$GS_FONTPATH" != "$(pwd)" ]] ; then
    echo -e "TERMINATION: Wrong working directory or GS_FONTPATH not set.\n" |tee -a $logfile
    echo -e "Current directory: $(pwd)" |tee -a $logfile
    echo -e "GS_FONTPATH: $GS_FONTPATH" |tee -a $logfile
    echo -e "$usage\n"
    exit 2
fi

[ ! -f Fontmap ] && echo -e "INFO: Ghostscripts local 'Fontmap' file missing, will
be created.\n" |tee -a $logfile  && touch Fontmap

ls *.[oOtT][tT][fF] 2>/dev/null 1>&2
if [ $? -ne 0 ] ; then
    echo -e "TERMINATION: No True or Open Type Font files (.ttf,.otf) in directory." |tee -a $logfile
    echo -e "$usage\n"
    exit 3
fi

availableTTF=( $(ls -1 *.[oOtT][tT][fF] | sed 's/\.otf\|\.ttf//i') )
installedPFB=( $(grep -e '^/' Fontmap | sed 's/^.*(\|\.pfb.*$//g') )

typeset -i counter
typeset -i numTTF
typeset -i numInstalled
typeset -i numPFB
numTTF=${#availableTTF[*]}
numInstalled=${#installedPFB[*]}
counter=$numInstalled
numPT1=$(ls -1 *.[aApP][fF][bBmM] 2>/dev/null | wc -l )

let z=numPT1/2
let m=numPT1%2

if (( $numInstalled < z && m == 0 )) ; then
    echo -e "WARNING: There are unregistered PS Type1 font files.\n" |tee -a $logfile
elif (( $numInstalled > z || m > 0 )) ; then
    echo -e "TERMINATION: There are missing PS Type1 font files. It is recommend to
syncronize all files and databases in this directory (delete Fontmap and rerun
$0)\n" |tee -a $logfile
    exit 4
fi

echo -e "STATUS: There are $numInstalled installed Postscript Type1 Fonts out of $numTTF
available True Type or Open Type Fonts for user $USER. \n" >>$logfile

if (( $numTTF != $numInstalled ))
then
    for ii in ${availableTTF[*]}; do
        for jj in ${installedPFB[*]}; do
            if [[ "$ii" != "$jj" ]]; then
                counter=$counter-1
            fi
        done
        if (( $counter ==  0 )) ; then
            queueFonts=("${queueFonts[@]}" "$ii")
        fi
       counter=$numInstalled
    done
else
    echo "INFO: Font database is up-to-date if you have not fiddled with the
contents of this directory or the local Fontmap file manually after the
last run of this script. Consult the log file for history.
   
Nothing to do. No new fonts installed." |tee -a $logfile
    exit 0
fi

for ff in ${queueFonts[@]}; do
    echo "-----------------------------------------------------------------"\
       >>$logfile
    echo "START OF TTF2PT1 LOG ENTRY FOR '$ff'" >>$logfile
    echo $(date) >>$logfile
    echo "-----------------------------------------------------------------"\
       >>$logfile

    ttf2pt1 -b $ff.[oOtT][tT][fF]  >>$logfile 2>&1

    fontNames=("${fontNames[@]}" "$(grep FontName $ff.afm | cut -d' ' -f2-)")
    familyNames=("${familyNames[@]}" \
        "$(grep FamilyName $ff.afm | cut -d' ' -f2- | sed 's/ /_/g')")
    faceNames=("${faceNames[@]}" \
        "$(grep Weight $ff.afm | cut -d' ' -f2- | \
        sed -e' s/^./\U&/g; s/ *//g; s/Regular/Base/i; s/Italic/Slope/i ')")
    tagNames=("${tagNames[@]}" "${familyNames[@]:(-1)}-${faceNames[@]:(-1)}")

    echo "/${fontNames[@]:(-1)} ($ff.pfb);" >>Fontmap
   
    if [[ -z `cat myfontdefs.ld | sed -n '/'"$ff"'.afm/p'` ]] ; then
        cat >>myfontdefs.ld<<LOUT_ENTRY
{ @FontDef
      @Tag { ${tagNames[@]:(-1)} }
      @Family { ${familyNames[@]:(-1)} }
      @Face { ${faceNames[@]:(-1)} }
      @Name { ${fontNames[@]:(-1)} }
      @Metrics { $ff.afm }
      @Mapping { LtLatin1.LCM }
}

LOUT_ENTRY
    fi
   
    # Correct for whitespace error in afm files
    sed -i 's/.null/space/' $ff.afm

    echo "*****************************************************************"\
        >>$logfile
    echo -e "Font: ${fontNames[@]:(-1)}; Tag: ${tagNames[@]:(-1)} (has been \
installed.)" |tee -a $logfile
done

reply via email to

[Prev in Thread] Current Thread [Next in Thread]