summaryrefslogtreecommitdiff
path: root/Build/source/texk/ttf2pt1/scripts/convert
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/ttf2pt1/scripts/convert')
-rw-r--r--Build/source/texk/ttf2pt1/scripts/convert367
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
+}