diff options
Diffstat (limited to 'Build/source/texk/ttf2pt1/scripts/convert')
-rw-r--r-- | Build/source/texk/ttf2pt1/scripts/convert | 367 |
1 files changed, 367 insertions, 0 deletions
diff --git a/Build/source/texk/ttf2pt1/scripts/convert b/Build/source/texk/ttf2pt1/scripts/convert new file mode 100644 index 00000000000..14c1868c5d8 --- /dev/null +++ b/Build/source/texk/ttf2pt1/scripts/convert @@ -0,0 +1,367 @@ +#!/bin/sh +# +# Copyright (c) 1998-2000 +# Sergey A. Babkin. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED +# WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. +# +# Sergey A. Babkin (sab123@hotmail.com, babkin@bellatlantic.net) +# + +# Use : convert [cfgfile] + +# Convert TTF fonts from source directory to Type1 fonts in the destination +# directory, converted to the specified encodings. Also generate the +# fonts.scale, fonts.dir and fonts.alias files in the destination directory. + +# clean some variables so that they won't be inherited from environment + +ENCDIR= +MAPDIR= + +# path to the configuration file + +if [ $# -eq 1 ] +then + CFGFILE=$1 +else + CFGFILE=`pwd`/convert.cfg +fi + +# these setting would be edited during installation + +TTF2PT1_BINDIR= +TTF2PT1_LIBXDIR= +TTF2PT1_SHAREDIR= + +[ -z "$TTF2PT1_BINDIR" ] && { + TTF2PT1_BINDIR=`pwd`/.. +} +[ -z "$TTF2PT1_LIBXDIR" ] && { + TTF2PT1_LIBXDIR=`pwd`/.. +} +[ -z "$TTF2PT1_SHAREDIR" ] && { + TTF2PT1_SHAREDIR=`pwd`/.. +} + +# directory from where we are started + +RUNDIR=`pwd` + +# paths to various utilities + +T1ASM=$TTF2PT1_LIBXDIR/t1asm +[ -f $T1ASM -a -x $T1ASM ] || { + # if it's not in libxdir, use whatever t1asm the system provides + T1ASM=t1asm +} +TTF2PT1=$TTF2PT1_BINDIR/ttf2pt1 +TRANS=$TTF2PT1_SHAREDIR/scripts/trans +T1FDIR=$TTF2PT1_SHAREDIR/scripts/t1fdir +FORCEISO=$TTF2PT1_SHAREDIR/scripts/forceiso +X2GS=$TTF2PT1_SHAREDIR/scripts/x2gs +SUFFIX="pfa" + +MYSELF=convert + +# include the configuration + +if [ -r $CFGFILE ] +then { + . $CFGFILE +} else { + echo " +Can't find the configuration file + $CFGFILE +Please look at the sample file convert.cfg.sample, +copy it to convert.cfg and modify for +you actual configuration." >&2 + exit 1 +} fi + +# path to the directory with descriptions of encodings +[ -z "$ENCDIR" ] && { + ENCDIR=$TTF2PT1_SHAREDIR/encodings +} + +# directory with the external Unicode maps +[ -z "$MAPDIR" ] && { + MAPDIR=$TTF2PT1_SHAREDIR/maps +} + +LOG=$DSTDIR/convert.log + +# configure the ttf2pt1 options from our options + +# artefact of backwards-compatibility with .cfg +[ -z "$CORRECTWIDTH" -a YES != "$DONTCORRECTWIDTH" ] && { + TTF2PT1="$TTF2PT1 -OW" +} +[ YES = "$CORRECTWIDTH" ] && { + TTF2PT1="$TTF2PT1 -OW" +} + +[ YES != "$HINTSUBST" ] && { + TTF2PT1="$TTF2PT1 -Ou" # meaning changed past 3.22 +} + +[ YES = "$ALLGLYPHS" -a YES = "$ENFORCEISO" ] && { + echo "$MYSELF: options ALLGLYPHS and ENFORCEISO are mutually exclusive" >&2 + exit 1 +} + +[ YES = "$ALLGLYPHS" ] && { + TTF2PT1="$TTF2PT1 -a" +} + +[ YES = "$GENUID" ] && { + TTF2PT1="$TTF2PT1 -uA" +} + +[ YES != "$ENFORCEISO" ] && { + FORCEISO=cat +} + +[ YES = "$CREATEPFB" ] && { + T1ASM="$T1ASM -b" + SUFFIX="pfb" +} + +# parse the information about the source files + +eval "`echo \"$SRCDIRS\" | awk ' + BEGIN { n=0; } + /^ *$/ { next; } + { + if(n>9) { + printf(\"echo \\\"Only 9 encodings are supported at once!\\\" >&2\n\"); + printf(\"exit 1\\n\"); + } else { + printf(\"SRCDIR%d=%s\n\",n,$1); + printf(\"SRCLANG%d=%s\n\",n,$2); + printf(\"SRCENC%d=%s\n\",n,$3); + printf(\"SRCMAP%d=%s\n\",n,$4); + n++; + } + }'`" + +# check whether we have the directories + +mkdir $DSTDIR 2>/dev/null >/dev/null +[ -d $DSTDIR -a -r $DSTDIR -a -w $DSTDIR -a -x $DSTDIR ] || { + echo "$MYSELF: can't access the directory $DSTDIR" >&2 + exit 1 +} + +# go to our destination directory + +cd $DSTDIR || { + echo "$MYSELF: can't chdir to $DSTDIR" >&2 + exit 1 +} + +rm -f ./* 2>/dev/null +>$LOG + +for dirno in 0 1 2 3 4 5 6 7 8 9 +do { + + SRCDIR=`eval "echo \\\$SRCDIR$dirno"` + SRCLANG=`eval "echo \\\$SRCLANG$dirno"` + SRCENC=`eval "echo \\\$SRCENC$dirno"` + SRCMAP=`eval "echo \\\$SRCMAP$dirno"` + DSTENC=`eval "echo \\\$DSTENC$SRCLANG"` + + echo $SRCDIR + echo $SRCENC + + [ -z "$SRCDIR" ] && break; + + [ "`ls $SRCDIR/*.[tT][tT][fF] 2>/dev/null |wc -l`" -gt 0 ] || { + echo "$MYSELF: no TTF files in $SRCDIR" >&2 + exit 1 + } + + # check whether we have the encoding tables + + [ -n "$SRCENC" ] || { + echo "$MYSELF: you must specify some source encoding" >&2 + exit 1 + } + + [ unknown = "$SRCLANG" -o -n "$DSTENC" ] || { + echo "$MYSELF: you must specify some destination encodings" >&2 + exit 1 + } + + # handle aliases of the destination encodings + + XDSTENC= + DSTALIAS= + + [ -r $ENCDIR/$SRCLANG/encodings.alias ] && { + for i in $DSTENC + do { + TO=`awk '$1=="'$i'" { print $2; }' <$ENCDIR/$SRCLANG/encodings.alias` + if [ -n "$TO" ] + then { + [ -f $ENCDIR/$SRCLANG/$i.tbl -a -r $ENCDIR/$SRCLANG/$i.tbl ] && { + echo "WARNING: $SRCLANG encoding $i found as both table and alias" >&2 + echo "WARNING: The alias takes precedence" >&2 + } + DSTALIAS="$TO $i +$DSTALIAS" + XDSTENC="$TO +$XDSTENC" + } else { + XDSTENC="$i +$XDSTENC" + } fi + } done + DSTENC=`echo "$XDSTENC" | sort -u | tr ' +' ' '` + } + + [ unknown != "$SRCLANG" ] && { + for i in $SRCENC $DSTENC + do { + [ -f $ENCDIR/$SRCLANG/$i.tbl -a -r $ENCDIR/$SRCLANG/$i.tbl ] || { + echo "$MYSELF: can't read $ENCDIR/$SRCLANG/$i.tbl" >&2 + exit 1 + } + } done + } + + # OK convert the files + + for file in $SRCDIR/*.[tT][tT][fF] + do { + name=`echo $file | tr A-Z a-z` + name=`basename $name .ttf` + + echo "Converting $name" + + # generate the assembler code + + echo "******* $name -> t1a ************" >>$LOG + + if [ -n "$SRCMAP" ] + then { + $TTF2PT1 -L $MAPDIR/$SRCMAP $file ./$name.$SRCENC 2>>$LOG + } else { + $TTF2PT1 -l $SRCLANG $file ./$name.$SRCENC 2>>$LOG + } fi + + [ -s ./$name.$SRCENC.t1a ] || { + echo "$MYSELF: can't generate Type1 assembler code for $name" >&2 + continue; + } + + [ -s ./$name.$SRCENC.afm ] || { + echo "$MYSELF: can't generate AFM metrics file for $name" >&2 + continue; + } + + mv ./$name.$SRCENC.afm ./$name.$SRCENC.xafm + + psname=`$T1FDIR -g $FOUNDRY " " -f ./$name.$SRCENC.t1a \ + | awk '{print substr($1,2);}'` + + # now for each destination encoding generate a .pfa/b file + # and record for fonts.scale + + if [ unknown != "$SRCLANG" ] + then { + for enc in $DSTENC + do { + echo "******* $name -> $enc ************" >>$LOG + + sed 's|^\/FontName.*$|/FontName /'$psname$enc' def|' <./$name.$SRCENC.t1a \ + | $TRANS $ENCDIR/$SRCLANG/$SRCENC.tbl $ENCDIR/$SRCLANG/$enc.tbl \ + | $FORCEISO | $T1ASM >./$name.$enc.$SUFFIX + [ -s ./$name.$enc.$SUFFIX ] || { + echo "$MYSELF: can't convert/assemble Type1 file for $name.$enc" >&2 + continue; + } + + sed 's|^FontName.*$|FontName '$psname$enc'|' <./$name.$SRCENC.xafm \ + | $TRANS $ENCDIR/$SRCLANG/$SRCENC.tbl $ENCDIR/$SRCLANG/$enc.tbl \ + | uniq | $FORCEISO >./$name.$enc.afm + [ -s ./$name.$enc.afm ] || { + echo "$MYSELF: can't convert AFM file for $name.$enc" >&2 + } + + aliases=`echo "$DSTALIAS" | grep "^$enc" | cut -d\ -f2` + echo "******* aliases: $aliases" >>$LOG + + $T1FDIR -d fonts.ttf fonts.alias $FOUNDRY $enc $aliases -f ./$name.$enc.$SUFFIX + echo "/$psname$enc ($name.$enc.$SUFFIX) ;" >>Fontmap.ttf + } done + } else { + enc="$SRCENC" + echo "******* $name -> $enc ************" >>$LOG + + sed 's|^\/FontName.*$|/FontName '$psname$enc' def|' <./$name.$SRCENC.t1a \ + | $FORCEISO | $T1ASM >./$name.$enc.$SUFFIX + [ -s ./$name.$enc.$SUFFIX ] || { + echo "$MYSELF: can't convert/assemble Type1 file for $name.$enc" >&2 + continue; + } + + sed 's|^FontName.*$|FontName '$psname$enc'|' <./$name.$SRCENC.xafm \ + | uniq | $FORCEISO >./$name.$enc.afm + [ -s ./$name.$enc.afm ] || { + echo "$MYSELF: can't convert AFM file for $name.$enc" >&2 + } + + $T1FDIR -d fonts.ttf fonts.alias $FOUNDRY $enc -f ./$name.$enc.$SUFFIX + echo "/$psname$enc ($name.$enc.$SUFFIX) ;" >>Fontmap.ttf + } fi + + [ YES = "$REMOVET1A" ] && { + rm -f ./$name.$SRCENC.t1a + rm -f ./$name.$SRCENC.xafm + } + + } done +} done + +wc -l <fonts.ttf >fonts.scale +cat fonts.ttf >>fonts.scale +mkfontdir + +[ YES = "$GENUID" ] && { + echo "Checking for duplicate UniqueIDs..." + for id in `find . -name "*.$SUFFIX" -exec grep UniqueID {} \; \ + | cut -d" " -f2 | sort | uniq -d` + do { + echo "Warning: duplicate UniqueID $id in files:" | tee -a $LOG + find . -name "*.$SUFFIX" -exec grep -l "UniqueID $id " {} \; 2>&1 | tee -a $LOG + } done +} + +[ -n "$GSDIR" ] || { + echo "$MYSELF: The Ghostscript base directory is not specified.\n" >&2 + echo "$MYSELF: Installation of the Ghostscript fonts is deferred.\n" >&2 + echo "$MYSELF: You can do it later by running x2gs\n" >&2 + exit 0 +} + +echo "Installing the Ghostscript fonts" +cd $RUNDIR +$X2GS $CFGFILE || { + echo "$MYSELF: Installation of the Ghostscript fonts has failed.\n" >&2 + echo "$MYSELF: You can correct the problem and run x2gs to repeat\n" >&2 + exit 0 +} |