#!/bin/bash -e
# $Id: ttf2tex.sh,v 0.70 2004/09/30 00:00:00 lehman pub $
# Copyright (c) 2000-2002,2004 Philipp Lehman <
[email protected]>
#
# ttf2tex is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version.
#
# ttf2tex is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place Suite 330, Boston, MA 02111-1307
# USA.
# Internal variables
myname="${0##*/}"
fullname="ttf2tex"
version="v0.7"
released="2004-09-30"
maintainer="<no maintainer>" # email address of maintainer
confpath="./ $HOME/. /etc/"
logfile="${fullname}.log"
date="$(date '+%Y-%m-%d %H:%M:%S')"
texdate="$(date '+%Y/%m/%d')"
debug_cmdline="$0 -b $*"
transcript=0
# Global auxiliary funtions
info() {
trap error_internal ERR
echo -e "$myname: $*"
if [ $transcript = 1 ]; then echo -e "$myname: $*" >>$logfile; fi
}
info_external() {
trap error_internal ERR
if [ -n "$2" ]; then echo -e "$1: $2"; fi
if [ -n "$2" -a $transcript = 1 ]; then echo -e "$1: $2" >>$logfile; fi
}
error() {
trap error_internal ERR
if [ -n "$*" ]; then info "$*"; else info "Unknown error"; fi
info "Aborting..."
exit 1
}
error_usage() {
trap error_internal ERR
usage
exit 1
}
error_internal() {
if [ "$DEBUG" = "1" ]; then return; fi
cat <<-EOF
An internal error occured! Please send a bug report to $maintainer.
I will now try to run $fullname again with the same options and debugging
turned on. The output will be written to the file 'debug.log'. Please
attach this file to your bug report.
Please note that 'debug.log' will contain a full dump of the current
environment. If you set passwords or any other sensitive data in your
environment, remove the relevant parts from 'debug.log'.
EOF
if [ "$confirm" != "0" ]; then
echo -e "\nPress <enter> to proceed or <ctrl-c> to abort"
read
fi
BASH_OPTIONS="$-"
export BASH_OPTIONS
echo -e "+++ ENVIRONMENT +++\n\n$(set)\n\n+++ DEBUG LOG +++\n" >debug.log
(DEBUG="1"; export DEBUG; bash -ex $debug_cmdline 2>>debug.log)
echo -e "\nOutput written to debug.log"
exit 1
}
clean() {
trap error_internal ERR
if [ "$DEBUG" = "1" ]; then return; fi
info "Cleaning up..."
for file in *.enc ttf2tfm.log ttf2afm.log mktexlsr.log $file_map_ttf2pk $pdftexmap \
${basefamily}*.afm ${basefamily}*.tfm ${basefamily}*.vf ${basefamily}*.fd ${basefamily}*.vpl
do
if [ -e $file ]; then rm $file; fi
done
}
usage() {
trap error_internal ERR
cat <<-EOF
$fullname $version $released
Usage:
$myname --help
$myname --dump-vectors
$myname [options] --foundry <foundry> --font <font> <family>
$myname [options] --user --foundry <foundry> --font <font> <family>
$myname [options] --install --foundry <foundry> --font <font> <family>
Options:
-h|--help print usage summary and exit
--dump-vectors dump encoding vectors and exit
-b|--batch run in batch mode
-l|--log write session log to $logfile
-n|--ps-names pass the -n switch to ttf2tfm
-N|--ps-names-only pass the -N switch to ttf2tfm
-t|--typewriter font is a typewriter font, disable hyphenation
-x|--expert expert mode, use small caps and old style figures
-u|--user install files into user TeX tree
-i|--install install files into local TeX tree
--overwrite overwrite files when installing, use with care!
-c|--caps <real> use <real> as height of small caps (default: ${capsheight})
-s|--slant <real> use <real> as obliqueness factor (default: ${slantfactor})
-f|--foundry <foundry> use <foundry> as foundry name
-o|--font <font> use <font> as font name
<family> the font family code
EOF
}
# Hash required binaries to check if they are available
check_requirements() {
trap error_internal ERR
hash ttf2tfm >/dev/null 2>&1 || {
info "Failed to find ttf2tfm!"
error "Make sure that the freetype tools are installed and that \$PATH is set correctly!"
}
hash ttf2afm >/dev/null 2>&1 || {
info "Failed to find ttf2afm!"
error "Make sure that \$PATH is set correctly!"
}
hash vptovf >/dev/null 2>&1 || {
info "Failed to find vptovf!"
error "Make sure that \$PATH is set correctly!"
}
}
# Confirmation prompt
prompt_confirm() {
trap error_internal ERR
if [ $confirm = 1 ]; then
echo
info "Press <enter> to proceed or <ctrl-c> to abort"
read
fi
}
# Display install paths
info_paths() {
trap error_internal ERR
if [ -n "$texmfinstall" ]; then
local install="$texmfinstall"
else
local install="$PWD"
fi
info "------------------------"
info " INSTALLATION PATHS"
info "------------------------"
info "Configuration file: $conffile"
info "Root directory: $install/"
info "Font metrics: $install/$path_afm/$foundry/$fontname/*.afm"
info "TeX font metrics: $install/$path_tfm/$foundry/$fontname/*.tfm"
info "Virtual fonts: $install/$path_vf/$foundry/$fontname/*.vf"
info "TrueType fonts: $install/$path_ttf/$foundry/$fontname/*.ttf"
info "pdfTeX map files: $install/$path_map_pdftex/*.map"
info "pdfTeX enc files: $install/$path_enc_pdftex/*.enc"
info "ttf2pk map file: $install/$path_map_ttf2pk/$file_map_ttf2pk"
info "ttf2pk enc files: $install/$path_enc_ttf2pk/*.enc"
info "Font definitions: $install/$path_fd/$foundry/$fontname/*.fd"
}
# Check for available weights
check_available() {
trap error_internal ERR
# ultra light
if [ -f "${basefamily}a${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries a"
mffallback="ul"
fi
# extra light
if [ -f "${basefamily}j${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries j"
mffallback="el"
fi
# light
if [ -f "${basefamily}l${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries l"
mffallback="l"
fi
# book
if [ -f "${basefamily}k${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries k"
mffallback="k"
fi
# regular
if [ -f "${basefamily}r${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries r"
mffallback="m"
fi
# poster
if [ -f "${basefamily}p${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries p"
bffallback="pb"
ubdefault="pb"
fi
# ultra bold
if [ -f "${basefamily}u${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries u"
bffallback="ub"
ubdefault="ub"
fi
# black
if [ -f "${basefamily}c${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries c"
bffallback="cb"
ebdefault="cb"
fi
# heavy
if [ -f "${basefamily}h${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries h"
bffallback="hb"
ebdefault="hb"
fi
# extra bold
if [ -f "${basefamily}x${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries x"
bffallback="eb"
ebdefault="eb"
fi
# medium
if [ -f "${basefamily}m${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries m"
bffallback="mb"
bfdefault=$bffallback
fi
# demibold
if [ -f "${basefamily}d${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries d"
bffallback="db"
bfdefault=$bffallback
fi
# semibold
if [ -f "${basefamily}s${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries s"
bffallback="sb"
bfdefault=$bffallback
fi
# bold
if [ -f "${basefamily}b${rawenc_wgl}.ttf" ]; then
fontseries="$fontseries b"
bffallback="b"
fi
# sanity checks
[ -n "$mffallback" -o -n "$bffallback" ] || error "No font files found!"
if [ -z "$mffallback" ]; then
mffallback="$bffallback"
fi
if [ -z "$bffallback" ]; then
bffallback="$mffallback"
fi
if [ -z "$bfdefault" ]; then
bfdefault=$bffallback
fi
}
# Auxiliary functions for info_map_available
info_map_upright() {
trap error_internal ERR
local family="$1"
local toweight="$2"
local fromweight="$3"
info "${family}/${fromweight}/n --> ${basefamily}${toweight}${rawenc_wgl}.ttf"
info "${family}/${fromweight}/sc --> ${basefamily}${toweight}${rawenc_wgl}.ttf"
info "${family}/${fromweight}/sl --> ${basefamily}${toweight}${rawenc_wgl}.ttf"
}
info_map_italic() {
trap error_internal ERR
local family="$1"
local toweight="$2"
local fromweight="$3"
info "${family}/${fromweight}/it --> ${basefamily}${toweight}i${rawenc_wgl}.ttf"
}
info_map_substitution() {
trap error_internal ERR
local family="$1"
local toweight="$2"
local fromweight="$3"
info "[sub] ${family}/${fromweight} --> ${family}/${toweight}"
}
info_map_substseries() {
trap error_internal ERR
local family="$1"
local toweight="$2"
local fromweight="$3"
info "[sub] ${family}/${fromweight}/n --> ${family}/${toweight}/n"
info "[sub] ${family}/${fromweight}/sc --> ${family}/${toweight}/sc"
info "[sub] ${family}/${fromweight}/sl --> ${family}/${toweight}/sl"
info "[sub] ${family}/${fromweight}/it --> ${family}/${toweight}/it"
}
# Display available weights
info_map_available() {
trap error_internal ERR
info "------------------------"
info " FONT MAPPING"
info "------------------------"
local family="$1"
# ultra light
if [ -f "${basefamily}a${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "a" "ul"
if [ -f "${basefamily}ai${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "a" "ul"
else
info_map_substitution "$family" "ul/sl" "ul/it"
fi
fi
# extra light
if [ -f "${basefamily}j${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "j" "el"
if [ -f "${basefamily}ji${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "j" "el"
else
info_map_substitution "$family" "el/sl" "el/it"
fi
fi
# light
if [ -f "${basefamily}l${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "l" "l"
if [ -f "${basefamily}li${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "l" "l"
else
info_map_substitution "$family" "l/sl" "l/it"
fi
fi
# book
if [ -f "${basefamily}k${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "k" "k"
if [ -f "${basefamily}ki${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "k" "k"
else
info_map_substitution "$family" "k/sl" "k/it"
fi
fi
# regular
if [ -f "${basefamily}r${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "r" "m"
if [ -f "${basefamily}ri${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "r" "m"
else
info_map_substitution "$family" "m/sl" "m/it"
fi
fi
# poster
if [ -f "${basefamily}p${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "p" "pb"
if [ -f "${basefamily}pi${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "p" "pb"
else
info_map_substitution "$family" "pb/sl" "pb/it"
fi
fi
# ultra bold
if [ -f "${basefamily}u${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "u" "ub"
if [ -f "${basefamily}ui${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "u" "ub"
else
info_map_substitution "$family" "ub/sl" "ub/it"
fi
else
if [ -n "$ubdefault" ]; then
info_map_substseries "$family" "$ubdefault" "ub"
fi
fi
# black
if [ -f "${basefamily}c${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "c" "cb"
if [ -f "${basefamily}ci${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "c" "cb"
else
info_map_substitution "$family" "cb/sl" "cb/it"
fi
fi
# heavy
if [ -f "${basefamily}h${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "h" "hb"
if [ -f "${basefamily}hi${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "h" "hb"
else
info_map_substitution "$family" "hb/sl" "hb/it"
fi
fi
# extra bold
if [ -f "${basefamily}x${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "x" "eb"
if [ -f "${basefamily}xi${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "x" "eb"
else
info_map_substitution "$family" "eb/sl" "eb/it"
fi
else
if [ -n "$ebdefault" ]; then
info_map_substseries "$family" "$ebdefault" "eb"
fi
fi
# medium
if [ -f "${basefamily}m${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "m" "mb"
if [ -f "${basefamily}mi${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "m" "mb"
else
info_map_substitution "$family" "mb/sl" "mb/it"
fi
fi
# demibold
if [ -f "${basefamily}d${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "d" "db"
if [ -f "${basefamily}di${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "d" "db"
else
info_map_substitution "$family" "db/sl" "db/it"
fi
fi
# semibold
if [ -f "${basefamily}s${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "s" "sb"
if [ -f "${basefamily}si${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "s" "sb"
else
info_map_substitution "$family" "sb/sl" "sb/it"
fi
fi
# bold
if [ -f "${basefamily}b${rawenc_wgl}.ttf" ]; then
info_map_upright "$family" "b" "b"
if [ -f "${basefamily}bi${rawenc_wgl}.ttf" ]; then
info_map_italic "$family" "b" "b"
else
info_map_substitution "$family" "b/sl" "b/it"
fi
fi
# substitutions
if [ -z "$mffallback" ]; then
info_map_substseries "$family" "$bffallback" "m"
elif [ "$mffallback" != "m" ]; then
info_map_substseries "$family" "$mffallback" "m"
fi
if [ -z "$bffallback" ]; then
info_map_substseries "$family" "$mffallback" "b"
elif [ "-$bffallback" != "-b" ]; then
info_map_substseries "$family" "$bffallback" "b"
fi
info_map_substseries "$family" "$bfdefault" "bx"
}
# Built-in encoding vectors ;)
dump_vectors() {
trap error_internal ERR
info "Creating encoding vector T1-WGL4.enc"
cat <<-EOF >T1-WGL4.enc
% T1-WGL4.enc
% Created by $fullname $version on $date
% This file should be put in a tex inputs directory
%
% Note: This encoding vector was installed by $fullname
% $version. It is based on the T1-WGL4.enc file
% distributed with FreeType versions 1.3.x and 1.4.
%
% Future versions of $fullname may ship with an
% updated version of this file.
%
% Derived from T1-WGL4.enc by Philipp Lehman <
[email protected]>
%
% Version 1.1 2002-05-20
%
% LaTeX T1 mapping for Unicode encoded TrueType fonts (WGL4)
%
% Note that /hyphen appears twice: at the T1 code points
% 0x2d (hyphen) and 0x7f (hyphenchar)
%
% LIGKERN space l =: lslash ;
% LIGKERN space L =: Lslash ;
% LIGKERN question quoteleft =: questiondown ;
% LIGKERN exclam quoteleft =: exclamdown ;
% LIGKERN hyphen hyphen =: endash ;
% LIGKERN endash hyphen =: emdash ;
% LIGKERN quoteleft quoteleft =: quotedblleft ;
% LIGKERN quoteright quoteright =: quotedblright ;
% LIGKERN comma comma =: quotedblbase ;
% LIGKERN less less =: guillemotleft ;
% LIGKERN greater greater =: guillemotright ;
%
% LIGKERN f i =: fi ;
% LIGKERN f l =: fl ;
% LIGKERN f f =: ff ;
% LIGKERN ff i =: ffi ;
% LIGKERN ff l =: ffl ;
%
% Remove kerns to and from spaces and remove any kerns from
% the numbers.
%
% LIGKERN space {} * ; * {} space ;
% LIGKERN zero {} * ; * {} zero ;
% LIGKERN one {} * ; * {} one ;
% LIGKERN two {} * ; * {} two ;
% LIGKERN three {} * ; * {} three ;
% LIGKERN four {} * ; * {} four ;
% LIGKERN five {} * ; * {} five ;
% LIGKERN six {} * ; * {} six ;
% LIGKERN seven {} * ; * {} seven ;
% LIGKERN eight {} * ; * {} eight ;
% LIGKERN nine {} * ; * {} nine ;
/T1Encoding [ % now 256 chars follow
% 0x00
/grave /acute /circumflex /tilde
/dieresis /hungarumlaut /ring /caron
/breve /macron /dotaccent /cedilla
/ogonek /quotesinglbase /guilsinglleft /guilsinglright
% 0x10
/quotedblleft /quotedblright /quotedblbase /guillemotleft
/guillemotright /endash /emdash /compwordmark
/perthousandzero /dotlessi /dotlessj /ff
/fi /fl /ffi /ffl
% 0x20
/visualspace /exclam /quotedbl /numbersign
/dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus
/comma /hyphen /period /slash
% 0x30
/zero /one /two /three
/four /five /six /seven
/eight /nine /colon /semicolon
/less /equal /greater /question
% 0x40
/at /A /B /C
/D /E /F /G
/H /I /J /K
/L /M /N /O
% 0x50
/P /Q /R /S
/T /U /V /W
/X /Y /Z /bracketleft
/backslash /bracketright /asciicircum /underscore
% 0x60
/quoteleft /a /b /c
/d /e /f /g
/h /i /j /k
/l /m /n /o
% 0x70
/p /q /r /s
/t /u /v /w
/x /y /z /braceleft
/bar /braceright /asciitilde /hyphen
% 0x80
/Abreve /Aogonek /Cacute /Ccaron
/Dcaron /Ecaron /Eogonek /Gbreve
/Lacute /Lcaron /Lslash /Nacute
/Ncaron /Eng /Odblacute /Racute
% 0x90
/Rcaron /Sacute /Scaron /Scedilla
/Tcaron /Tcedilla /Udblacute /Uring
/Ydieresis /Zacute /Zcaron /Zdotaccent
/IJ /Idot /dmacron /section
% 0xA0
/abreve /aogonek /cacute /ccaron
/dcaron /ecaron /eogonek /gbreve
/lacute /lcaron /lslash /nacute
/ncaron /eng /odblacute /racute
% 0xB0
/rcaron /sacute /scaron /scedilla
/tcaron /tcedilla /udblacute /uring
/ydieresis /zacute /zcaron /zdotaccent
/ij /exclamdown /questiondown /sterling
% 0xC0
/Agrave /Aacute /Acircumflex /Atilde
/Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
% 0xD0
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /OE
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /Germandbls
% 0xE0
/agrave /aacute /acircumflex /atilde
/adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis
/igrave /iacute /icircumflex /idieresis
% 0xF0
/eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /oe
/oslash /ugrave /uacute /ucircumflex
/udieresis /yacute /thorn /germandbls
] def
% eof
EOF
info "Creating encoding vector T1-OSF.enc"
cat <<-EOF >T1-OSF.enc
% T1-OSF.enc
% Created by $fullname $version on $date
% This file should be put in a tex inputs directory
%
% Note: This encoding vector was installed by $fullname
% $version. It is based on the T1-WGL4.enc file
% distributed with FreeType versions 1.3.x and 1.4.
%
% Future versions of $fullname may ship with an
% updated version of this file.
%
% Derived from T1-WGL4.enc by Philipp Lehman <
[email protected]>
%
% Version 1.1 2002-05-20
%
% LaTeX T1 mapping for Unicode encoded TrueType fonts (WGL4),
% using old style instead of the default figures
%
% Note that /hyphen appears twice: at the T1 code points
% 0x2d (hyphen) and 0x7f (hyphenchar)
%
% LIGKERN space l =: lslash ;
% LIGKERN space L =: Lslash ;
% LIGKERN question quoteleft =: questiondown ;
% LIGKERN exclam quoteleft =: exclamdown ;
% LIGKERN hyphen hyphen =: endash ;
% LIGKERN endash hyphen =: emdash ;
% LIGKERN quoteleft quoteleft =: quotedblleft ;
% LIGKERN quoteright quoteright =: quotedblright ;
% LIGKERN comma comma =: quotedblbase ;
% LIGKERN less less =: guillemotleft ;
% LIGKERN greater greater =: guillemotright ;
%
% LIGKERN f i =: fi ;
% LIGKERN f l =: fl ;
% LIGKERN f f =: ff ;
% LIGKERN ff i =: ffi ;
% LIGKERN ff l =: ffl ;
%
% Remove kerns to and from spaces and remove any kerns from
% the numbers.
%
% LIGKERN space {} * ; * {} space ;
% LIGKERN zerooldstyle {} * ; * {} zerooldstyle ;
% LIGKERN oneoldstyle {} * ; * {} oneoldstyle ;
% LIGKERN twooldstyle {} * ; * {} twooldstyle ;
% LIGKERN threeoldstyle {} * ; * {} threeoldstyle ;
% LIGKERN fouroldstyle {} * ; * {} fouroldstyle ;
% LIGKERN fiveoldstyle {} * ; * {} fiveoldstyle ;
% LIGKERN sixoldstyle {} * ; * {} sixoldstyle ;
% LIGKERN sevenoldstyle {} * ; * {} sevenoldstyle ;
% LIGKERN eightoldstyle {} * ; * {} eightoldstyle ;
% LIGKERN nineoldstyle {} * ; * {} nineoldstyle ;
/T1Encoding [ % now 256 chars follow
% 0x00
/grave /acute /circumflex /tilde
/dieresis /hungarumlaut /ring /caron
/breve /macron /dotaccent /cedilla
/ogonek /quotesinglbase /guilsinglleft /guilsinglright
% 0x10
/quotedblleft /quotedblright /quotedblbase /guillemotleft
/guillemotright /endash /emdash /compwordmark
/perthousandzero /dotlessi /dotlessj /ff
/fi /fl /ffi /ffl
% 0x20
/visualspace /exclam /quotedbl /numbersign
/dollar /percent /ampersand /quoteright
/parenleft /parenright /asterisk /plus
/comma /hyphen /period /slash
% 0x30
/zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle
/fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle
/eightoldstyle /nineoldstyle /colon /semicolon
/less /equal /greater /question
% 0x40
/at /A /B /C
/D /E /F /G
/H /I /J /K
/L /M /N /O
% 0x50
/P /Q /R /S
/T /U /V /W
/X /Y /Z /bracketleft
/backslash /bracketright /asciicircum /underscore
% 0x60
/quoteleft /a /b /c
/d /e /f /g
/h /i /j /k
/l /m /n /o
% 0x70
/p /q /r /s
/t /u /v /w
/x /y /z /braceleft
/bar /braceright /asciitilde /hyphen
% 0x80
/Abreve /Aogonek /Cacute /Ccaron
/Dcaron /Ecaron /Eogonek /Gbreve
/Lacute /Lcaron /Lslash /Nacute
/Ncaron /Eng /Odblacute /Racute
% 0x90
/Rcaron /Sacute /Scaron /Scedilla
/Tcaron /Tcedilla /Udblacute /Uring
/Ydieresis /Zacute /Zcaron /Zdotaccent
/IJ /Idot /dmacron /section
% 0xA0
/abreve /aogonek /cacute /ccaron
/dcaron /ecaron /eogonek /gbreve
/lacute /lcaron /lslash /nacute
/ncaron /eng /odblacute /racute
% 0xB0
/rcaron /sacute /scaron /scedilla
/tcaron /tcedilla /udblacute /uring
/ydieresis /zacute /zcaron /zdotaccent
/ij /exclamdown /questiondown /sterling
% 0xC0
/Agrave /Aacute /Acircumflex /Atilde
/Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
% 0xD0
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /OE
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /Germandbls
% 0xE0
/agrave /aacute /acircumflex /atilde
/adieresis /aring /ae /ccedilla
/egrave /eacute /ecircumflex /edieresis
/igrave /iacute /icircumflex /idieresis
% 0xF0
/eth /ntilde /ograve /oacute
/ocircumflex /otilde /odieresis /oe
/oslash /ugrave /uacute /ucircumflex
/udieresis /yacute /thorn /germandbls
] def
% eof
EOF
info "Creating encoding vector T1-SC.enc"
cat <<-EOF >T1-SC.enc
% T1-SC.enc
% Created by $fullname $version on $date
% This file should be put in a tex inputs directory
%
% Note: This encoding vector was installed by $fullname
% $version. It is based on the T1-WGL4.enc file
% distributed with FreeType versions 1.3.x and 1.4.
%
% Future versions of $fullname may ship with an
% updated version of this file.
%
% Derived from T1-WGL4.enc by Bruce D\'Arcus <
[email protected]>
% Modified and enhanced by Philipp Lehman <
[email protected]>
%
% Version 1.3 2002-05-20
%
% LaTeX T1 mapping for Unicode encoded TrueType fonts (WGL4),
% using small caps instead of lowercase glyphs
%
% Note that /hyphen appears twice: at the T1 code points
% 0x2d (hyphen) and 0x7f (hyphenchar)
%
% LIGKERN space Lsmall =: Lslashsmall ;
% LIGKERN space L =: Lslash ;
% LIGKERN question quoteleft =: questiondown ;
% LIGKERN exclam quoteleft =: exclamdown ;
% LIGKERN hyphen hyphen =: endash ;
% LIGKERN endash hyphen =: emdash ;
% LIGKERN quoteleft quoteleft =: quotedblleft ;
% LIGKERN quoteright quoteright =: quotedblright ;
% LIGKERN comma comma =: quotedblbase ;
% LIGKERN less less =: guillemotleft ;
% LIGKERN greater greater =: guillemotright ;
%
% Remove kerns to and from spaces and remove any kerns from
% the numbers.
%
% LIGKERN space {} * ; * {} space ;
% LIGKERN zero {} * ; * {} zero ;
% LIGKERN one {} * ; * {} one ;
% LIGKERN two {} * ; * {} two ;
% LIGKERN three {} * ; * {} three ;
% LIGKERN four {} * ; * {} four ;
% LIGKERN five {} * ; * {} five ;
% LIGKERN six {} * ; * {} six ;
% LIGKERN seven {} * ; * {} seven ;
% LIGKERN eight {} * ; * {} eight ;
% LIGKERN nine {} * ; * {} nine ;
/T1Encoding [ % now 256 chars follow
% 0x00
/grave /acute /circumflex /tilde
/dieresis /hungarumlaut /ring /caron
/breve /macron /dotaccent /cedilla
/ogonek /quotesinglbase /guilsinglleft /guilsinglright
% 0x10
/quotedblleft /quotedblright /quotedblbase /guillemotleft
/guillemotright /endash /emdash /compwordmark
/perthousandzero /dotlessIsmall /dotlessJsmall /ff
/fi /fl /ffi /ffl
% 0x20
/visualspace /exclam /quotedbl /numbersign
/dollaroldstyle /percentsmall /ampersandsmall /quoteright
/parenleft /parenright /asterisk /plus
/comma /hyphen /period /slash
% 0x30
/zero /one /two /three
/four /five /six /seven
/eight /nine /colon /semicolon
/less /equal /greater /question
% 0x40
/at /A /B /C
/D /E /F /G
/H /I /J /K
/L /M /N /O
% 0x50
/P /Q /R /S
/T /U /V /W
/X /Y /Z /bracketleft
/backslash /bracketright /asciicircum /underscore
% 0x60
/quoteleft /Asmall /Bsmall /Csmall
/Dsmall /Esmall /Fsmall /Gsmall
/Hsmall /Ismall /Jsmall /Ksmall
/Lsmall /Msmall /Nsmall /Osmall
% 0x70
/Psmall /Qsmall /Rsmall /Ssmall
/Tsmall /Usmall /Vsmall /Wsmall
/Xsmall /Ysmall /Zsmall /braceleft
/bar /braceright /asciitilde /hyphen
% 0x80
/Abreve /Aogonek /Cacute /Ccaron
/Dcaron /Ecaron /Eogonek /Gbreve
/Lacute /Lcaron /Lslash /Nacute
/Ncaron /Eng /Odblacute /Racute
% 0x90
/Rcaron /Sacute /Scaron /Scedilla
/Tcaron /Tcedilla /Udblacute /Uring
/Ydieresis /Zacute /Zcaron /Zdotaccent
/IJ /Idot /Dmacronsmall /section
% 0xA0
/Abrevesmall /Aogoneksmall /Cacutesmall /Ccaronsmall
/Dcaronsmall /Ecaronsmall /Eogoneksmall /Gbrevesmall
/Lacutesmall /Lcaronsmall /Lslashsmall /Nacutesmall
/Ncaronsmall /Engsmall /Odblacutesmall /Racutesmall
% 0xB0
/Rcaronsmall /Sacutesmall /Scaronsmall /Scedillasmall
/Tcaronsmall /Tcedillasmall /Udblacutesmall /Uringsmall
/Ydieresissmall /Zacutesmall /Zcaronsmall /Zdotaccentsmall
/IJsmall /exclamdown /questiondown /sterling
% 0xC0
/Agrave /Aacute /Acircumflex /Atilde
/Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
% 0xD0
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /OE
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /Germandbls
% 0xE0
/Agravesmall /Aacutesmall /Acircumflexsmall /Atildesmall
/Adieresissmall /Aringsmall /AEsmall /Ccedillasmall
/Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall
/Igravesmall /Iacutesmall /Icircumflexsmall /Idieresissmall
% 0xF0
/Ethsmall /Ntildesmall /Ogravesmall /Oacutesmall
/Ocircumflexsmall /Otildesmall /Odieresissmall /OEsmall
/Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall
/Udieresissmall /Yacutesmall /Thornsmall /germandbls
] def
% eof
EOF
info "Creating encoding vector T1-SCOSF.enc"
cat <<-EOF >T1-SCOSF.enc
% T1-SCOSF.enc
% Created by $fullname $version on $date
% This file should be put in a tex inputs directory
%
% Note: This encoding vector was installed by $fullname
% $version. It is based on the T1-WGL4.enc file
% distributed with FreeType versions 1.3.x and 1.4.
%
% Future versions of $fullname may ship with an
% updated version of this file.
%
% Derived from T1-SC.enc by Philipp Lehman <
[email protected]>
%
% Version 1.3 2002-05-20
%
% LaTeX T1 mapping for Unicode encoded TrueType fonts (WGL4),
% using small caps instead of lowercase glyphs and old style
% instead of the default figures
%
% Note that /hyphen appears twice: at the T1 code points
% 0x2d (hyphen) and 0x7f (hyphenchar)
%
% LIGKERN space Lsmall =: Lslashsmall ;
% LIGKERN space L =: Lslash ;
% LIGKERN questionsmall quoteleft =: questiondownsmall ;
% LIGKERN exclamsmall quoteleft =: exclamdownsmall ;
% LIGKERN hyphen hyphen =: endash ;
% LIGKERN endash hyphen =: emdash ;
% LIGKERN quoteleft quoteleft =: quotedblleft ;
% LIGKERN quoteright quoteright =: quotedblright ;
% LIGKERN comma comma =: quotedblbase ;
% LIGKERN less less =: guillemotleft ;
% LIGKERN greater greater =: guillemotright ;
%
% Remove kerns to and from spaces and remove any kerns from
% the numbers.
%
% LIGKERN space {} * ; * {} space ;
% LIGKERN zerooldstyle {} * ; * {} zerooldstyle ;
% LIGKERN oneoldstyle {} * ; * {} oneoldstyle ;
% LIGKERN twooldstyle {} * ; * {} twooldstyle ;
% LIGKERN threeoldstyle {} * ; * {} threeoldstyle ;
% LIGKERN fouroldstyle {} * ; * {} fouroldstyle ;
% LIGKERN fiveoldstyle {} * ; * {} fiveoldstyle ;
% LIGKERN sixoldstyle {} * ; * {} sixoldstyle ;
% LIGKERN sevenoldstyle {} * ; * {} sevenoldstyle ;
% LIGKERN eightoldstyle {} * ; * {} eightoldstyle ;
% LIGKERN nineoldstyle {} * ; * {} nineoldstyle ;
/T1Encoding [ % now 256 chars follow
% 0x00
/grave /acute /circumflex /tilde
/dieresis /hungarumlaut /ring /caron
/breve /macron /dotaccent /cedilla
/ogonek /quotesinglbase /guilsinglleft /guilsinglright
% 0x10
/quotedblleft /quotedblright /quotedblbase /guillemotleft
/guillemotright /endash /emdash /compwordmark
/perthousandzero /dotlessIsmall /dotlessJsmall /ff
/fi /fl /ffi /ffl
% 0x20
/visualspace /exclam /quotedbl /numbersign
/dollaroldstyle /percentsmall /ampersandsmall /quoteright
/parenleft /parenright /asterisk /plus
/comma /hyphen /period /slash
% 0x30
/zerooldstyle /oneoldstyle /twooldstyle /threeoldstyle
/fouroldstyle /fiveoldstyle /sixoldstyle /sevenoldstyle
/eightoldstyle /nineoldstyle /colon /semicolon
/less /equal /greater /question
% 0x40
/at /A /B /C
/D /E /F /G
/H /I /J /K
/L /M /N /O
% 0x50
/P /Q /R /S
/T /U /V /W
/X /Y /Z /bracketleft
/backslash /bracketright /asciicircum /underscore
% 0x60
/quoteleft /Asmall /Bsmall /Csmall
/Dsmall /Esmall /Fsmall /Gsmall
/Hsmall /Ismall /Jsmall /Ksmall
/Lsmall /Msmall /Nsmall /Osmall
% 0x70
/Psmall /Qsmall /Rsmall /Ssmall
/Tsmall /Usmall /Vsmall /Wsmall
/Xsmall /Ysmall /Zsmall /braceleft
/bar /braceright /asciitilde /hyphen
% 0x80
/Abreve /Aogonek /Cacute /Ccaron
/Dcaron /Ecaron /Eogonek /Gbreve
/Lacute /Lcaron /Lslash /Nacute
/Ncaron /Eng /Odblacute /Racute
% 0x90
/Rcaron /Sacute /Scaron /Scedilla
/Tcaron /Tcedilla /Udblacute /Uring
/Ydieresis /Zacute /Zcaron /Zdotaccent
/IJ /Idot /Dmacronsmall /section
% 0xA0
/Abrevesmall /Aogoneksmall /Cacutesmall /Ccaronsmall
/Dcaronsmall /Ecaronsmall /Eogoneksmall /Gbrevesmall
/Lacutesmall /Lcaronsmall /Lslashsmall /Nacutesmall
/Ncaronsmall /Engsmall /Odblacutesmall /Racutesmall
% 0xB0
/Rcaronsmall /Sacutesmall /Scaronsmall /Scedillasmall
/Tcaronsmall /Tcedillasmall /Udblacutesmall /Uringsmall
/Ydieresissmall /Zacutesmall /Zcaronsmall /Zdotaccentsmall
/IJsmall /exclamdown /questiondown /sterling
% 0xC0
/Agrave /Aacute /Acircumflex /Atilde
/Adieresis /Aring /AE /Ccedilla
/Egrave /Eacute /Ecircumflex /Edieresis
/Igrave /Iacute /Icircumflex /Idieresis
% 0xD0
/Eth /Ntilde /Ograve /Oacute
/Ocircumflex /Otilde /Odieresis /OE
/Oslash /Ugrave /Uacute /Ucircumflex
/Udieresis /Yacute /Thorn /Germandbls
% 0xE0
/Agravesmall /Aacutesmall /Acircumflexsmall /Atildesmall
/Adieresissmall /Aringsmall /AEsmall /Ccedillasmall
/Egravesmall /Eacutesmall /Ecircumflexsmall /Edieresissmall
/Igravesmall /Iacutesmall /Icircumflexsmall /Idieresissmall
% 0xF0
/Ethsmall /Ntildesmall /Ogravesmall /Oacutesmall
/Ocircumflexsmall /Otildesmall /Odieresissmall /OEsmall
/Oslashsmall /Ugravesmall /Uacutesmall /Ucircumflexsmall
/Udieresissmall /Yacutesmall /Thornsmall /germandbls
] def
% eof
EOF
info "Creating encoding vector TS1-AGL.enc"
cat <<-EOF >TS1-AGL.enc
% TS1-AGL.enc
% Created by $fullname $version on $date
% This file should be put in a tex inputs directory
%
% Note: This encoding vector was installed by $fullname
% $version.
%
% Future versions of $fullname may ship with an
% updated version of this file.
%
% This file is still more or less experimental.
%
% Originally written by D. van Dok <
[email protected]>
% Modified and enhanced by Werner Lemberg <
[email protected]>
%
% Version 0.1 2001-02-15
%
% Glyph names follow the Adobe Glyph List (AGL); WGL4 glyph
% name variants (mostly for older fonts) as documented in
% the TrueType specification are as follows.
%
% Omega -> Ohm
% lira -> afii08941
% mu -> mu1
% periodcentered -> middot
%
% Glyph names marked with "?" are uncertain; any improvements welcome
/TS1Encoding [ % now 256 chars follow
% 0x00
/Grave % CAPITAL GRAVE ACCENT (AGL)
/Acute % CAPITAL ACUTE ACCENT (AGL)
/.notdef % CAPITAL CIRCUMFLEX ACCENT
/.notdef % CAPITAL TILDE ACCENT
/Dieresis % CAPITAL DIAERESIS (AGL)
/Hungarumlaut % CAPITAL DOUBLE ACUTE ACCENT (AGL)
/.notdef % CAPITAL RING ACCENT
/Caron % CAPITAL CARON (AGL)
/.notdef % CAPITAL BREVE ACCENT
/Macron % CAPITAL MACRON (AGL)
/.notdef % CAPITAL DOT ABOVE ACCENT
/cedilla % CAPITAL CEDILLA (AGL, WGL4)
/ogonek % CAPITAL OGONEK (AGL, WGL4)
/quotesinglbase % SINGLE LOW-9 QUOTATION MARK (AGL, WGL4)
/.notdef
/.notdef
% 0x10
/.notdef
/.notdef
/quotedblbase % DOUBLE LOW-9 QUOTATION MARK (AGL, WGL4)
/.notdef
/.notdef
/.notdef % 2/3 em dash
/threequartersemdash % THREE QUARTERS EM DASH (AGL)
/.notdef % capital compound word mark
/arrowleft % LEFTWARDS ARROW (AGL, WGL4)
/arrowright % RIGHTWARDS ARROW (AGL, WGL4)
/uni2040 % ? TIE ACCENT (AGL)
/.notdef % ? CAPITAL TIE ACCENT
/.notdef % ? TIE ACCENT (variant)
/.notdef % ? CAPITAL TIE ACCENT (variant)
/.notdef
/.notdef % lowercase ascender compound word mark
% 0x20
/uni0180 % LATIN SMALL LETTER B WITH STROKE (AGL)
/.notdef
/.notdef
/.notdef
/dollar % DOLLAR SIGN (AGL, WGL4)
/.notdef
/.notdef
/quotesingle % APOSTROPHE (AGL, WGL4)
/.notdef
/.notdef
/asterisk % ASTERISK (AGL, WGL4)
/.notdef
/comma % COMMA (AGL, WGL4)
/.notdef % HYPHEN (glyph variant with two strokes)
/period % FULL STOP (AGL, WGL4)
/fraction % ? FRACTION SLASH (AGL, WGL4) or "/slash"
% 0x30
/zerooldstyle % OLDSTYLE DIGIT ZERO (AGL)
/oneoldstyle % OLDSTYLE DIGIT ONE (AGL)
/twooldstyle % OLDSTYLE DIGIT TWO (AGL)
/threeoldstyle % OLDSTYLE DIGIT THREE (AGL)
/fouroldstyle % OLDSTYLE DIGIT FOUR (AGL)
/fiveoldstyle % OLDSTYLE DIGIT FIVE (AGL)
/sixoldstyle % OLDSTYLE DIGIT SIX (AGL)
/sevenoldstyle % OLDSTYLE DIGIT SEVEN (AGL)
/eightoldstyle % OLDSTYLE DIGIT EIGHT (AGL)
/nineoldstyle % OLDSTYLE DIGIT NINE (AGL)
/.notdef
/.notdef
/angleleft % LEFT-POINTING ANGLE BRACKET (AGL)
/minus % MINUS SIGN (AGL, WGL4)
/angleright % RIGHT-POINTING ANGLE BRACKET (AGL)
/.notdef
% 0x40
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/uni2127 % INVERTED OHM SIGN (AGL)
/.notdef
/circle % WHITE CIRCLE (AGL, WGL4)
% 0x50
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/Omega % OHM SIGN (AGL, WGL4 -> "/Ohm")
/.notdef
/.notdef
/.notdef
/.notdef % OPENING DOUBLE SQUARE BRACKET
/.notdef
/.notdef % CLOSING DOUBLE SQUARE BRACKET
/arrowup % UPWARDS ARROW (AGL, WGL4)
/arrowdown % DOWNWARDS ARROW (AGL, WGL4)
% 0x60
/grave % GRAVE ACCENT (AGL, WGL4)
/.notdef
/.notdef % BORN
/.notdef % DIVORCED
/.notdef % DIED
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef % LEAF
/.notdef % MARRIED
/musicalnote % EIGTH NOTE (AGL, WGL4)
/.notdef
% 0x70
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/asciitilde % TILDE (AGL, WGL4)
/.notdef % HYPHEN (glyph variant with two strokes)
% 0x80
/breve % BREVE (AGL, WGL4)
/caron % CARON (AGL, WGL4)
/hungarumlaut % DOUBLE ACUTE ACCENT (AGL, WGL4)
/dblGrave % CAPITAL GRAVE DOUBLE ACCENT (AGL)
/dagger % DAGGER (AGL, WGL4)
/daggerdbl % DOUBLE DAGGER (AGL, WGL4)
/.notdef % double vertical bar
/perthousand % PER MILLE SIGN (AGL, WGL4)
/bullet % BULLET (AGL, WGL4)
/uni2103 % DEGREE CELSIUS (AGL)
/dollaroldstyle % OLDSTYLE DOLLAR SIGN (AGL)
/centoldstyle % OLDSTYLE CENT SIGN (AGL)
/florin % LATIN SMALL LETTER F WITH HOOK (AGL, WGL4)
/colonmonetary % COLON SIGN (AGL)
/uni20A9 % WON SIGN (AGL)
/uni20A6 % NAIRA SIGN (AGL)
% 0x90
/.notdef % ? LATIN CAPITAL LETTER G WITH VERTICAL STROKE (guarani)
/.notdef % ? LATIN CAPITAL LETTER P WITH STROKE (peso)
/lira % LIRA SIGN (AGL, WGL4 -> "/afii08941")
/prescription % ? RECIPE (AGL)
/uni203D % INTERROBANG (AGL)
/.notdef % INTERROBANG INVERTED
/dong % DONG SIGN (AGL)
/trademark % TRADE MARK SIGN (AGL, WGL4)
/uni2031 % PER TEN THOUSAND SIGN (AGL)
/.notdef % ? PILCROW SIGN (glyph variant)
/uni0E3F % THAI CURRENCY SYMBOL BAHT (AGL)
/afii61352 % NUMERO SIGN (AGL, WGL4)
/.notdef % PERCENT SIGN (glyph variant)
/estimated % ESTIMATED SYMBOL (AGL, WGL4)
/openbullet % WHITE BULLET (AGL, WGL4)
/uni2120 % SERVICE MARK (AGL)
% 0xA0
/uni2045 % LEFT SQUARE BRACKET WITH SQUILL (AGL)
/uni2046 % RIGHT SQUARE BRACKET WITH SQUILL (AGL)
/cent % CENT SIGN (AGL, WGL4)
/sterling % POUND SIGN (AGL, WGL4)
/currency % CURRENCY SIGN (AGL, WGL4)
/yen % YEN SIGN (AGL, WGL4)
/brokenbar % BROKEN BAR (AGL, WGL4)
/section % SECTION SIGN (AGL, WGL4)
/dieresis % DIAERESIS (AGL, WGL4)
/copyright % COPYRIGHT SIGN (AGL, WGL4)
/ordfeminine % FEMININE ORDINAL INDICATOR (AGL, WGL4)
/.notdef % COPYLEFT SIGN
/logicalnot % NOT SIGN (AGL, WGL4)
/uni2117 % SOUND RECORDING COPYRIGHT (AGL)
/registered % REGISTERED SIGN (AGL, WGL4)
/macron % MACRON (AGL, WGL4)
% 0xB0
/degree % DEGREE SIGN (AGL, WGL4)
/plusminus % PLUS-MINUS SIGN (AGL, WGL4)
/twosuperior % SUPERSCRIPT TWO (AGL, WGL4)
/threesuperior % SUPERSCRIPT THREE (AGL, WGL4)
/acute % ACUTE ACCENT (AGL, WGL4)
/mu % MICRO SIGN (AGL, WGL4 -> "/mu1")
/paragraph % PILCROW SIGN (AGL, WGL4)
/periodcentered % MIDDLE DOT (AGL, WGL4 -> "/middot")
/uni203B % REFERENCE MARK
/onesuperior % SUPERSCRIPT ONE (AGL, WGL4)
/ordmasculine % MASCULINE ORDINAL INDICATOR (AGL, WGL4)
/radical % SQUARE ROOT (AGL, WGL4)
/onequarter % VULGAR FRACTION ONE QUARTER (AGL, WGL4)
/onehalf % VULGAR FRACTION ONE HALF (AGL, WGL4)
/threequarters % VULGAR FRACTION THREE QUARTERS (AGL, WGL4)
/Euro % EURO SIGN (AGL)
% 0xC0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
% 0xD0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/multiply % MULTIPLICATION SIGN (AGL, WGL4)
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
% 0xE0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
% 0xF0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/divide % DIVISION SIGN (AGL, WGL4)
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
] def
% eof
EOF
info "Creating encoding vector TS1-SC.enc"
cat <<-EOF >TS1-SC.enc
% TS1-SC.enc
% Created by $fullname $version on $date
% This file should be put in a tex inputs directory
%
% Note: This encoding vector was installed by $fullname
% $version.
%
% Future versions of $fullname may ship with an
% updated version of this file.
%
% This file is still more or less experimental.
%
% Derived from TS1-AGL.enc by Philipp Lehman <
[email protected]>
%
% Version 0.1 2002-05-01
%
% Glyph names marked with "?" are uncertain; any improvements welcome
/TS1Encoding [ % now 256 chars follow
% 0x00
/Grave % CAPITAL GRAVE ACCENT (AGL)
/Acute % CAPITAL ACUTE ACCENT (AGL)
/.notdef % CAPITAL CIRCUMFLEX ACCENT
/.notdef % CAPITAL TILDE ACCENT
/Dieresis % CAPITAL DIAERESIS (AGL)
/Hungarumlaut % CAPITAL DOUBLE ACUTE ACCENT (AGL)
/.notdef % CAPITAL RING ACCENT
/Caron % CAPITAL CARON (AGL)
/.notdef % CAPITAL BREVE ACCENT
/Macron % CAPITAL MACRON (AGL)
/.notdef % CAPITAL DOT ABOVE ACCENT
/cedilla % CAPITAL CEDILLA (AGL, WGL4)
/ogonek % CAPITAL OGONEK (AGL, WGL4)
/quotesinglbase % SINGLE LOW-9 QUOTATION MARK (AGL, WGL4)
/.notdef
/.notdef
% 0x10
/.notdef
/.notdef
/quotedblbase % DOUBLE LOW-9 QUOTATION MARK (AGL, WGL4)
/.notdef
/.notdef
/.notdef % 2/3 em dash
/threequartersemdash % THREE QUARTERS EM DASH (AGL)
/.notdef % capital compound word mark
/arrowleft % LEFTWARDS ARROW (AGL, WGL4)
/arrowright % RIGHTWARDS ARROW (AGL, WGL4)
/uni2040 % ? TIE ACCENT (AGL)
/.notdef % ? CAPITAL TIE ACCENT
/.notdef % ? TIE ACCENT (variant)
/.notdef % ? CAPITAL TIE ACCENT (variant)
/.notdef
/.notdef % lowercase ascender compound word mark
% 0x20
/uni0180 % LATIN SMALL LETTER B WITH STROKE (AGL)
/.notdef
/.notdef
/.notdef
/dollaroldstyle % OLDSTYLE DOLLAR SIGN (AGL)
/.notdef
/.notdef
/quotesingle % APOSTROPHE (AGL, WGL4)
/.notdef
/.notdef
/asterisk % ASTERISK (AGL, WGL4)
/.notdef
/comma % COMMA (AGL, WGL4)
/.notdef % HYPHEN (glyph variant with two strokes)
/period % FULL STOP (AGL, WGL4)
/fraction % ? FRACTION SLASH (AGL, WGL4) or "/slash"
% 0x30
/zerooldstyle % OLDSTYLE DIGIT ZERO (AGL)
/oneoldstyle % OLDSTYLE DIGIT ONE (AGL)
/twooldstyle % OLDSTYLE DIGIT TWO (AGL)
/threeoldstyle % OLDSTYLE DIGIT THREE (AGL)
/fouroldstyle % OLDSTYLE DIGIT FOUR (AGL)
/fiveoldstyle % OLDSTYLE DIGIT FIVE (AGL)
/sixoldstyle % OLDSTYLE DIGIT SIX (AGL)
/sevenoldstyle % OLDSTYLE DIGIT SEVEN (AGL)
/eightoldstyle % OLDSTYLE DIGIT EIGHT (AGL)
/nineoldstyle % OLDSTYLE DIGIT NINE (AGL)
/.notdef
/.notdef
/angleleft % LEFT-POINTING ANGLE BRACKET (AGL)
/minus % MINUS SIGN (AGL, WGL4)
/angleright % RIGHT-POINTING ANGLE BRACKET (AGL)
/.notdef
% 0x40
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/uni2127 % INVERTED OHM SIGN (AGL)
/.notdef
/circle % WHITE CIRCLE (AGL, WGL4)
% 0x50
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/Omega % OHM SIGN (AGL, WGL4 -> "/Ohm")
/.notdef
/.notdef
/.notdef
/.notdef % OPENING DOUBLE SQUARE BRACKET
/.notdef
/.notdef % CLOSING DOUBLE SQUARE BRACKET
/arrowup % UPWARDS ARROW (AGL, WGL4)
/arrowdown % DOWNWARDS ARROW (AGL, WGL4)
% 0x60
/grave % GRAVE ACCENT (AGL, WGL4)
/.notdef
/.notdef % BORN
/.notdef % DIVORCED
/.notdef % DIED
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef % LEAF
/.notdef % MARRIED
/musicalnote % EIGTH NOTE (AGL, WGL4)
/.notdef
% 0x70
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/asciitilde % TILDE (AGL, WGL4)
/.notdef % HYPHEN (glyph variant with two strokes)
% 0x80
/breve % BREVE (AGL, WGL4)
/caron % CARON (AGL, WGL4)
/hungarumlaut % DOUBLE ACUTE ACCENT (AGL, WGL4)
/dblGrave % CAPITAL GRAVE DOUBLE ACCENT (AGL)
/dagger % DAGGER (AGL, WGL4)
/daggerdbl % DOUBLE DAGGER (AGL, WGL4)
/.notdef % double vertical bar
/perthousand % PER MILLE SIGN (AGL, WGL4)
/bullet % BULLET (AGL, WGL4)
/uni2103 % DEGREE CELSIUS (AGL)
/dollaroldstyle % OLDSTYLE DOLLAR SIGN (AGL)
/centoldstyle % OLDSTYLE CENT SIGN (AGL)
/florin % LATIN SMALL LETTER F WITH HOOK (AGL, WGL4)
/colonmonetary % COLON SIGN (AGL)
/uni20A9 % WON SIGN (AGL)
/uni20A6 % NAIRA SIGN (AGL)
% 0x90
/.notdef % ? LATIN CAPITAL LETTER G WITH VERTICAL STROKE (guarani)
/.notdef % ? LATIN CAPITAL LETTER P WITH STROKE (peso)
/lira % LIRA SIGN (AGL, WGL4 -> "/afii08941")
/prescription % ? RECIPE (AGL)
/uni203D % INTERROBANG (AGL)
/.notdef % INTERROBANG INVERTED
/dong % DONG SIGN (AGL)
/trademark % TRADE MARK SIGN (AGL, WGL4)
/uni2031 % PER TEN THOUSAND SIGN (AGL)
/.notdef % ? PILCROW SIGN (glyph variant)
/uni0E3F % THAI CURRENCY SYMBOL BAHT (AGL)
/afii61352 % NUMERO SIGN (AGL, WGL4)
/.notdef % PERCENT SIGN (glyph variant)
/estimated % ESTIMATED SYMBOL (AGL, WGL4)
/openbullet % WHITE BULLET (AGL, WGL4)
/uni2120 % SERVICE MARK (AGL)
% 0xA0
/uni2045 % LEFT SQUARE BRACKET WITH SQUILL (AGL)
/uni2046 % RIGHT SQUARE BRACKET WITH SQUILL (AGL)
/cent % CENT SIGN (AGL, WGL4)
/sterling % POUND SIGN (AGL, WGL4)
/currency % CURRENCY SIGN (AGL, WGL4)
/yen % YEN SIGN (AGL, WGL4)
/brokenbar % BROKEN BAR (AGL, WGL4)
/section % SECTION SIGN (AGL, WGL4)
/dieresis % DIAERESIS (AGL, WGL4)
/copyright % COPYRIGHT SIGN (AGL, WGL4)
/ordfeminine % FEMININE ORDINAL INDICATOR (AGL, WGL4)
/.notdef % COPYLEFT SIGN
/logicalnot % NOT SIGN (AGL, WGL4)
/uni2117 % SOUND RECORDING COPYRIGHT (AGL)
/registered % REGISTERED SIGN (AGL, WGL4)
/macron % MACRON (AGL, WGL4)
% 0xB0
/degree % DEGREE SIGN (AGL, WGL4)
/plusminus % PLUS-MINUS SIGN (AGL, WGL4)
/twosuperior % SUPERSCRIPT TWO (AGL, WGL4)
/threesuperior % SUPERSCRIPT THREE (AGL, WGL4)
/acute % ACUTE ACCENT (AGL, WGL4)
/mu % MICRO SIGN (AGL, WGL4 -> "/mu1")
/paragraph % PILCROW SIGN (AGL, WGL4)
/periodcentered % MIDDLE DOT (AGL, WGL4 -> "/middot")
/uni203B % REFERENCE MARK
/onesuperior % SUPERSCRIPT ONE (AGL, WGL4)
/ordmasculine % MASCULINE ORDINAL INDICATOR (AGL, WGL4)
/radical % SQUARE ROOT (AGL, WGL4)
/onequarter % VULGAR FRACTION ONE QUARTER (AGL, WGL4)
/onehalf % VULGAR FRACTION ONE HALF (AGL, WGL4)
/threequarters % VULGAR FRACTION THREE QUARTERS (AGL, WGL4)
/Euro % EURO SIGN (AGL)
% 0xC0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
% 0xD0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/multiply % MULTIPLICATION SIGN (AGL, WGL4)
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
% 0xE0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
% 0xF0
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/divide % DIVISION SIGN (AGL, WGL4)
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
/.notdef
] def
% eof
EOF
}
# Misc functions used by create_fd below
create_fd_addfont() {
local fdfile="$1"
local texenc="$2"
local family="$3"
local fileenc="$4"
local texweight="$5"
local fileweight="$6"
echo >>$fdfile
info "Declaring $texenc/$family/$texweight/n"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{n} {<-> ${basefamily}${fileweight}${fileenc}}{}" >>$fdfile
info "Declaring $texenc/$family/$texweight/sc"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{sc}{<-> ${basefamily}${fileweight}c${fileenc}}{}" >>$fdfile
info "Declaring $texenc/$family/$texweight/sl"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{sl}{<-> ${basefamily}${fileweight}o${fileenc}}{}" >>$fdfile
if [ -f "${basefamily}${fileweight}i${rawenc_wgl}.ttf" ]; then
info "Declaring ${texenc}/$family/$texweight/it"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{it}{<-> ${basefamily}${fileweight}i${fileenc}}{}" >>$fdfile
else
info "Adding noisy substitution ${texenc}/$family/$texweight/it --> ${texenc}/$family/$texweight/sl"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{it}{<-> sub * ${family}/${texweight}/sl}{}" >>$fdfile
fi
}
create_fd_substitute_silent() {
trap error_internal ERR
local fdfile="$1"
local texenc="$2"
local family="$3"
local fileenc="$4"
local texweight="$5"
local substitute="$6"
echo >>$fdfile
info "Adding silent substitution ${texenc}/${family}/${texweight}/n --> ${texenc}/${family}/${substitute}/n"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{n} {<-> ssub * ${family}/${substitute}/n}{}" >>$fdfile
info "Adding silent substitution ${texenc}/${family}/${texweight}/sc --> ${texenc}/${family}/${substitute}/sc"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{sc}{<-> ssub * ${family}/${substitute}/sc}{}" >>$fdfile
info "Adding silent substitution ${texenc}/${family}/${texweight}/sl --> ${texenc}/${family}/${substitute}/sl"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{sl}{<-> ssub * ${family}/${substitute}/sl}{}" >>$fdfile
info "Adding silent substitution ${texenc}/${family}/${texweight}/it --> ${texenc}/${family}/${substitute}/it"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{it}{<-> ssub * ${family}/${substitute}/it}{}" >>$fdfile
}
create_fd_substitute_noisy() {
trap error_internal ERR
local fdfile="$1"
local texenc="$2"
local family="$3"
local fileenc="$4"
local texweight="$5"
local substitute="$6"
echo >>$fdfile
info "Adding noisy substitution ${texenc}/${family}/${texweight}/n --> ${texenc}/${family}/${substitute}/n"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{n} {<-> sub * ${family}/${substitute}/n}{}" >>$fdfile
info "Adding noisy substitution ${texenc}/${family}/${texweight}/sc --> ${texenc}/${family}/${substitute}/sc"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{sc}{<-> sub * ${family}/${substitute}/sc}{}" >>$fdfile
info "Adding noisy substitution ${texenc}/${family}/${texweight}/sl --> ${texenc}/${family}/${substitute}/sl"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{sl}{<-> sub * ${family}/${substitute}/sl}{}" >>$fdfile
info "Adding noisy substitution ${texenc}/${family}/${texweight}/it --> ${texenc}/${family}/${substitute}/it"
echo "\\DeclareFontShape{$texenc}{$family}{$texweight}{it}{<-> sub * ${family}/${substitute}/it}{}" >>$fdfile
}
# Create font declaration files
create_fd() {
trap error_internal ERR
local fdfile="$1"
local texenc="$2"
local family="$3"
local fileenc="$4"
# headers
info "Creating $fdfile"
echo -n >$fdfile
echo -e "% ${fdfile}\n% Created by $fullname $version on $date" >>$fdfile
echo -e "% This file should be put in a tex inputs directory\n" >>$fdfile
echo "\\ProvidesFile{${fdfile}}[$texdate ${texenc}/${family} font definitions]" >>$fdfile
echo >>$fdfile
echo "\\DeclareFontFamily{$texenc}{$family}{$family_init}" >>$fdfile
# ultra light
if [ -f "${basefamily}a${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "ul" "a"
fi
# extra light
if [ -f "${basefamily}j${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "el" "j"
fi
# light
if [ -f "${basefamily}l${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "l" "l"
fi
# book
if [ -f "${basefamily}k${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "k" "k"
fi
# regular
if [ -f "${basefamily}r${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "m" "r"
else
if [ "$mffallback" = "k" ]; then
create_fd_substitute_silent "$fdfile" "$texenc" "$family" "$fileenc" "m" "$mffallback"
else
create_fd_substitute_noisy "$fdfile" "$texenc" "$family" "$fileenc" "m" "$mffallback"
fi
fi
# medium
if [ -f "${basefamily}m${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "mb" "m"
fi
# demibold
if [ -f "${basefamily}d${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "db" "d"
fi
# semibold
if [ -f "${basefamily}s${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "sb" "s"
fi
# bold
if [ -f "${basefamily}b${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "b" "b"
else
if [ "$bffallback" = "mb" -o "$bffallback" = "sb" -o "$bffallback" = "db" ]; then
create_fd_substitute_silent "$fdfile" "$texenc" "$family" "$fileenc" "b" "$bffallback"
else
create_fd_substitute_noisy "$fdfile" "$texenc" "$family" "$fileenc" "b" "$bffallback"
fi
fi
# extra bold
if [ -f "${basefamily}x${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "eb" "x"
fi
# heavy
if [ -f "${basefamily}h${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "hb" "h"
if [ "$ebdefault" = "hb" ]; then
create_fd_substitute_silent "$fdfile" "$texenc" "$family" "$fileenc" "eb" "hb"
fi
fi
# black
if [ -f "${basefamily}c${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "cb" "c"
if [ "$ebdefault" = "cb" ]; then
create_fd_substitute_silent "$fdfile" "$texenc" "$family" "$fileenc" "eb" "cb"
fi
fi
# ultra bold
if [ -f "${basefamily}u${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "ub" "u"
fi
# poster
if [ -f "${basefamily}p${rawenc_wgl}.ttf" ]; then
create_fd_addfont "$fdfile" "$texenc" "$family" "$fileenc" "pb" "p"
if [ "$ubdefault" = "pb" ]; then
create_fd_substitute_silent "$fdfile" "$texenc" "$family" "$fileenc" "ub" "pb"
fi
fi
# bold extended
if [ "$bfdefault" = "mb" -o "$bfdefault" = "sb"\
-o "$bfdefault" = "db" -o "$bfdefault" = "b" ]
then
create_fd_substitute_silent "$fdfile" "$texenc" "$family" "$fileenc" "bx" "$bfdefault"
else
create_fd_substitute_noisy "$fdfile" "$texenc" "$family" "$fileenc" "bx" "$bfdefault"
fi
# end input
echo >>$fdfile
echo "\\endinput" >>$fdfile
echo >>$fdfile
}
# Tag map files
create_map_begin() {
local family="$1"
echo "% [BEG $family] -- Created by $fullname $version on $date" >>$file_map_ttf2pk
echo "% [BEG $family] -- Created by $fullname $version on $date" >>$pdftexmap
}
create_map_end() {
local family="$1"
echo "% [END $family] -- Created by $fullname $version on $date" >>$file_map_ttf2pk
echo "% [END $family] -- Created by $fullname $version on $date" >>$pdftexmap
}
# Pretty printing for map files
create_map_fill() {
trap error_internal ERR
local strg="$2"
if [ ${#strg} -lt $1 ]; then
local cnt=${#strg}
while [ $cnt -lt $1 ]; do
local strg="$strg "
local cnt=$(($cnt + 1))
done
else
local strg="$strg "
fi
echo -n "$strg"
}
# Warning: slanting not supported by pdftex
create_map_warning() {
trap error_internal ERR
cat <<-EOF >>$pdftexmap
% Note: When this version of $fullname was released, pdfTeX did not support slanting of
% TrueType fonts. The relevant lines below are therefore commented out. See the
% ttf2tex manual and the pdfTeX documentation for details.
EOF
}
# Create afm files
create_afm() {
trap error_internal ERR
for series in $fontseries; do
for font in "${basefamily}${series}${rawenc_wgl}.ttf" "${basefamily}${series}i${rawenc_wgl}.ttf"; do
if [ -e $font ]; then
base="${font%${rawenc_wgl}.ttf}"
info "Running ttf2afm on $font"
ttf2afm -a -o ${base}${rawenc_wgl}.afm ./$font 2>ttf2afm.log
while read output; do info_external "ttf2afm" "$output"; done <ttf2afm.log
fi
done
done
}
# Create metrics and map files (upright)
create_tfm_upright() {
trap error_internal ERR
local flags="$1"
local vector="$2"
local enc="$3"
local rawenc="$4"
for series in $fontseries; do
font="${basefamily}${series}${rawenc_wgl}.ttf"
if [ -e $font ]; then
base="${font%${rawenc_wgl}.ttf}"
info "Running ttf2tfm on $font [vector: ${vector}]"
ttf2tfm ./$font $flags -T $vector -v ${base}${enc}.vpl ${base}${rawenc}.tfm 2>ttf2tfm.log | while read texfontname ttfontname encoding; do
create_map_fill 16 "$texfontname" >>$file_map_ttf2pk
create_map_fill 24 "$ttfontname" >>$file_map_ttf2pk
echo "$encoding" >>$file_map_ttf2pk
done
while read output; do info_external "ttf2tfm" "$output"; done <ttf2tfm.log
psname="$(grep "^FontName " ${base}${rawenc_wgl}.afm | cut -d ' ' -f 2-)"
info "Adding $font to $pdftexmap [vector: ${vector}]"
create_map_fill 16 "${base}${rawenc}" >>$pdftexmap
create_map_fill 56 "$psname" >>$pdftexmap
echo "<$vector <$font" >>$pdftexmap
fi
done
}
# Create metrics and map files (italic)
create_tfm_italic() {
trap error_internal ERR
local flags="$1"
local vector="$2"
local enc="$3"
local rawenc="$4"
for series in $fontseries; do
font="${basefamily}${series}i${rawenc_wgl}.ttf"
if [ -e $font ]; then
base="${font%${rawenc_wgl}.ttf}"
info "Running ttf2tfm on $font [vector: ${vector}]"
ttf2tfm ./$font $flags -T $vector -v ${base}${enc}.vpl ${base}${rawenc}.tfm 2>ttf2tfm.log | while read texfontname ttfontname encoding; do
create_map_fill 16 "$texfontname" >>$file_map_ttf2pk
create_map_fill 24 "$ttfontname" >>$file_map_ttf2pk
echo "$encoding" >>$file_map_ttf2pk
done
while read output; do info_external "ttf2tfm" "$output"; done <ttf2tfm.log
psname="$(grep "^FontName " ${base}${rawenc_wgl}.afm | cut -d ' ' -f 2-)"
info "Adding $font to $pdftexmap [vector: ${vector}]"
create_map_fill 16 "${base}${rawenc}" >>$pdftexmap
create_map_fill 56 "$psname" >>$pdftexmap
echo "<$vector <$font" >>$pdftexmap
fi
done
}
# Create metrics and map files (real small caps)
create_tfm_smallcaps_real() {
trap error_internal ERR
local flags="$1"
local vector="$2"
local enc="$3"
local rawenc="$4"
for series in $fontseries; do
font="${basefamily}${series}${rawenc_wgl}.ttf"
if [ -e $font ]; then
base="${font%${rawenc_wgl}.ttf}"
info "Running ttf2tfm on $font [vector: ${vector}]"
ttf2tfm ./$font $flags -T $vector -v ${base}c${enc}.vpl ${base}c${rawenc}.tfm 2>ttf2tfm.log | while read texfontname ttfontname encoding; do
create_map_fill 16 "$texfontname" >>$file_map_ttf2pk
create_map_fill 24 "$ttfontname" >>$file_map_ttf2pk
echo "$encoding" >>$file_map_ttf2pk
done
while read output; do info_external "ttf2tfm" "$output"; done <ttf2tfm.log
psname="$(grep '^FontName' ${base}${rawenc_wgl}.afm | cut -d ' ' -f 2-)"
info "Adding $font to $pdftexmap [vector: ${vector}]"
create_map_fill 16 "${base}c${rawenc}" >>$pdftexmap
create_map_fill 56 "$psname" >>$pdftexmap
echo "<$vector <$font" >>$pdftexmap
fi
done
}
# Create metrics and map files (faked small caps)
create_tfm_smallcaps_fake() {
trap error_internal ERR
local flags="$1"
local vector="$2"
local enc="$3"
local rawenc="$4"
for series in $fontseries; do
font="${basefamily}${series}${rawenc_wgl}.ttf"
if [ -e $font ]; then
base="${font%${rawenc_wgl}.ttf}"
info "Running ttf2tfm on $font [vector: ${vector}] [small caps height: $capsheight]"
ttf2tfm ./$font $flags -T $vector -c $capsheight -V ${base}c${enc}.vpl ${base}${rawenc}.tfm >/dev/null 2>ttf2tfm.log
while read output; do info_external "ttf2tfm" "$output"; done <ttf2tfm.log
fi
done
}
# Create metrics and map files (slanted)
create_tfm_slanted() {
trap error_internal ERR
local flags="$1"
local vector="$2"
local enc="$3"
local rawenc="$4"
for series in $fontseries; do
font="${basefamily}${series}${rawenc_wgl}.ttf"
if [ -e $font ]; then
base="${font%${rawenc_wgl}.ttf}"
info "Running ttf2tfm on $font [vector: ${vector}] [slant factor: $slantfactor]"
ttf2tfm ./$font $flags -T $vector -s $slantfactor -v ${base}o${enc}.vpl ${base}o${rawenc}.tfm 2>ttf2tfm.log | while read texfontname ttfontname encoding; do
create_map_fill 16 "$texfontname" >>$file_map_ttf2pk
create_map_fill 24 "$ttfontname" >>$file_map_ttf2pk
echo "$encoding" >>$file_map_ttf2pk
done
while read output; do info_external "ttf2tfm" "$output"; done <ttf2tfm.log
psname="$(grep '^FontName' ${base}${rawenc_wgl}.afm | cut -d ' ' -f 2-)"
# slanting not supported by pdftex
info "Adding $font to $pdftexmap [vector: ${vector}] [slant factor: $slantfactor] *disabled*"
create_map_fill 16 "% ${base}o${rawenc}" >>$pdftexmap
create_map_fill 32 "$psname" >>$pdftexmap
create_map_fill 24 "\"$slantfactor SlantFont\"" >>$pdftexmap
echo "<$vector <$font" >>$pdftexmap
fi
done
}
# Create virtual fonts
create_vf() {
trap error_internal ERR
for font in *.vpl; do
base=$(basename $font .vpl)
info "Running vptovf on $font"
vptovf ./$font ${base}.vf ${base}.tfm | while read output; do info_external "vptovf" "$output"; done
done
}
# Copy/move files safely, used by install_files below
install_files_copy() {
trap error_internal ERR
if [ -e "$2/$1" ]; then
if [ $overwrite = 1 ]; then
info "Overwriting $1"
cp $1 $2
chmod 0644 "$2/$1"
else
info "File $2/$1 exists"
info "Skipping $1"
fi
else
info "Installing $1"
cp $1 $2
chmod 0644 "$2/$1"
fi
}
install_files_move() {
trap error_internal ERR
if [ -e "$2/$1" ]; then
if [ $overwrite = 1 ]; then
info "Overwriting $1"
mv $1 $2
chmod 0644 "$2/$1"
else
info "File $2/$1 exists"
info "Skipping $1"
fi
else
info "Installing $1"
mv $1 $2
chmod 0644 "$2/$1"
fi
}
# Sort files in working directory
sort_files() {
trap error_internal ERR
for dir in $path_afm $path_tfm $path_ttf $path_vf $path_fd; do
mkdir -m 0755 -p ${dir}/${foundry}/${fontname}
done
for dir in $path_map_ttf2pk $path_enc_ttf2pk $path_map_pdftex $path_enc_pdftex; do
mkdir -m 0755 -p $dir
done
for file in ${basefamily}*.afm; do
info "Moving $file"
mv $file ${path_afm}/${foundry}/${fontname}
done
for file in ${basefamily}*.tfm; do
info "Moving $file"
mv $file ${path_tfm}/${foundry}/${fontname}
done
for file in ${basefamily}*.ttf; do
info "Copying $file"
cp $file ${path_ttf}/${foundry}/${fontname}
done
for file in ${basefamily}*.vf; do
info "Moving $file"
mv $file ${path_vf}/${foundry}/${fontname}
done
for file in *${basefamily}*.fd; do
info "Moving $file"
mv $file ${path_fd}/${foundry}/${fontname}
done
for file in *.enc; do
info "Copying $file"
cp $file ${path_enc_ttf2pk}
cp $file ${path_enc_pdftex}
done
info "Moving $pdftexmap"
mv $pdftexmap ${path_map_pdftex}/${pdftexmap}
info "Updating $file_map_ttf2pk"
cat $file_map_ttf2pk >>${path_map_ttf2pk}/${file_map_ttf2pk}
}
# Install files into tex tree
install_files() {
trap error_internal ERR
for dir in $path_afm $path_tfm $path_ttf $path_vf $path_fd; do
mkdir -m 0755 -p ${texmfinstall}/${dir}/${foundry}/${fontname}
done
for dir in $path_map_ttf2pk $path_enc_ttf2pk $path_map_pdftex $path_enc_pdftex; do
mkdir -m 0755 -p ${texmfinstall}/${dir}
done
for file in ${basefamily}*.afm; do
install_files_move $file "${texmfinstall}/${path_afm}/${foundry}/${fontname}"
done
for file in ${basefamily}*.tfm; do
install_files_move $file "${texmfinstall}/${path_tfm}/${foundry}/${fontname}"
done
for file in ${basefamily}*.ttf; do
install_files_copy $file "${texmfinstall}/${path_ttf}/${foundry}/${fontname}"
done
for file in ${basefamily}*.vf; do
install_files_move $file "${texmfinstall}/${path_vf}/${foundry}/${fontname}"
done
for file in *${basefamily}*.fd; do
install_files_move $file "${texmfinstall}/${path_fd}/${foundry}/${fontname}"
done
for file in *.enc; do
install_files_copy $file "${texmfinstall}/${path_enc_ttf2pk}"
install_files_copy $file "${texmfinstall}/${path_enc_pdftex}"
done
cat $file_map_ttf2pk >>${texmfinstall}/${path_map_ttf2pk}/${file_map_ttf2pk}
install_files_move $pdftexmap ${texmfinstall}/${path_map_pdftex}
# update file database
info "Running mktexlsr to update file database"
mktexlsr $texmfinstall >mktexlsr.log 2>&1
while read output; do info_external "mktexlsr" "$output"; done <mktexlsr.log
}
# Trap internal errors
trap error_internal ERR
# Read config file
for confpath in $confpath; do
if [ -f "${confpath}${fullname}.cfg" ]; then
conffile="${confpath}${fullname}.cfg"
break
fi
done
if [ -n "${conffile}" ]; then
source "${conffile}"
else
error "Failed to find configuration file ${fullname}.cfg!"
fi
# Set defaults
path_afm="${path_afm:-fonts/afm}"
path_tfm="${path_tfm:-fonts/tfm}"
path_vf="${path_vf:-fonts/vf}"
path_ttf="${path_ttf:-fonts/truetype}"
path_fd="${path_fd:-tex/latex/ttfonts}"
path_map_pdftex="${path_map_pdftex:-pdftex/config}"
path_enc_pdftex="${path_enc_pdftex:-pdftex/config}"
path_map_ttf2pk="${path_map_ttf2pk:-ttf2pk}"
path_enc_ttf2pk="${path_enc_ttf2pk:-ttf2pk}"
file_map_ttf2pk="${file_map_ttf2pk:-ttfonts.map}"
slantfactor="0.167"
capsheight="0.800"
confirm=1
inst=0
user=0
expert=0
overwrite=0
flags_common="-q"
texenc_t1="8t"
texenc_ts1="8c"
texenc_t1x="9e"
texenc_ts1x="9c"
texenc_t1j="9d"
rawenc_wgl="16"
rawenc_t1="16t"
rawenc_ts1="16c"
rawenc_t1x="17e"
rawenc_ts1x="17c"
rawenc_t1j="17d"
# Parse command line
if [ $# -lt 1 ]; then error_usage; fi
while [ -n "$1" ]; do
case $1 in
--dump-vectors)
dump_vectors
exit 0
;;
-h|--help) usage
exit 0
;;
-b|--batch) confirm=0
shift
;;
-l|--log) transcript=1
shift
;;
-i|--install)
inst=1
shift
;;
-u|--user) user=1
inst=1
shift
;;
-t|--typewriter)
family_init="\\hyphenchar\\font=-1"
shift
;;
-x|--expert)
expert=1
shift
;;
-n|--ps-names)
flags_psnames="-n"
shift
;;
-N|--ps-names-only)
flags_psnames="-N"
shift
;;
--overwrite)
overwrite=1
shift
;;
-f|--foundry)
if [ -z "$2" -o -z "${2%%-*}" ]; then error_usage; fi
foundry="${2// /}"
shift
shift
;;
-o|--font) if [ -z "$2" -o -z "${2%%-*}" ]; then error_usage; fi
fontname="${2// /}"
shift
shift
;;
-c|--caps) if [ -z "$2" -o -z "${2%%-*}" ]; then error_usage; fi
capsheight="$2"
shift
shift
;;
-s|--slant) if [ -z "$2" -o -z "${2%%-*}" ]; then error_usage; fi
slantfactor="$2"
shift
shift
;;
-*) error_usage
;;
[A-Za-z0-9][A-Za-z0-9][A-Za-z0-9]*)
basefamily="$1"
shift
;;
*) error_usage
;;
esac
done
[ -n "$basefamily" -a -n "$foundry" -a -n "$fontname" ] || error_usage
pdftexmap="${basefamily}.map"
if [ $inst = 1 ]; then
if [ $user = 1 ]; then
texmfinstall="$(kpsexpand '$HOMETEXMF')"
else
texmfinstall="$(kpsexpand '$TEXMFLOCAL')"
fi
[ -n "$texmfinstall" ] || error "Failed to get \$TEXMFLOCAL from kpathsea!"
[ -d "$texmfinstall" ] || error "Directory $texmfinstall does not exist!"
[ -w "$texmfinstall" ] || error "Directory $texmfinstall is not writeable!"
if [ $overwrite = 1 ]; then
echo
info "Running in overwrite mode!"
echo
fi
fi
# Traps, umask
trap clean EXIT
trap "error 'Received SIGINT!'" SIGINT
umask 022
# Let's go
if [ $transcript = 1 ]; then
echo -e "\nTranscript of $fullname session on $date\n" >$logfile
fi
check_requirements
info_paths
prompt_confirm
check_available
info_map_available "$basefamily"
if [ $expert = 1 ]; then
info_map_available "${basefamily}x"
info_map_available "${basefamily}j"
fi
prompt_confirm
dump_vectors
create_afm
create_map_begin "$basefamily"
if [ $expert = 1 ]; then
# standard
create_tfm_upright "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_upright "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_tfm_italic "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_italic "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_tfm_smallcaps_real "$flags_common -N" "T1-SC.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_smallcaps_real "$flags_common -N" "TS1-SC.enc" "$texenc_ts1" "$rawenc_ts1"
create_map_warning
create_tfm_slanted "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_slanted "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
# expert
create_tfm_upright "$flags_common -N" "T1-WGL4.enc" "$texenc_t1x" "$rawenc_t1x"
create_tfm_upright "$flags_common -N" "TS1-AGL.enc" "$texenc_ts1x" "$rawenc_ts1x"
create_tfm_italic "$flags_common -N" "T1-WGL4.enc" "$texenc_t1x" "$rawenc_t1x"
create_tfm_italic "$flags_common -N" "TS1-AGL.enc" "$texenc_ts1x" "$rawenc_ts1x"
create_tfm_smallcaps_real "$flags_common -N" "T1-SC.enc" "$texenc_t1x" "$rawenc_t1x"
create_tfm_smallcaps_real "$flags_common -N" "TS1-SC.enc" "$texenc_ts1x" "$rawenc_ts1x"
create_map_warning
create_tfm_slanted "$flags_common -N" "T1-WGL4.enc" "$texenc_t1x" "$rawenc_t1x"
create_tfm_slanted "$flags_common -N" "TS1-AGL.enc" "$texenc_ts1x" "$rawenc_ts1x"
# osf
create_tfm_upright "$flags_common -N" "T1-OSF.enc" "$texenc_t1j" "$rawenc_t1j"
create_tfm_italic "$flags_common -N" "T1-OSF.enc" "$texenc_t1j" "$rawenc_t1j"
create_tfm_smallcaps_real "$flags_common -N" "T1-SCOSF.enc" "$texenc_t1j" "$rawenc_t1j"
create_map_warning
create_tfm_slanted "$flags_common -N" "T1-OSF.enc" "$texenc_t1j" "$rawenc_t1j"
elif [ $expert = 0 -a -n "$flags_psnames" ]; then
create_tfm_upright "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_upright "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_tfm_italic "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_italic "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_tfm_smallcaps_fake "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_smallcaps_fake "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_map_warning
create_tfm_slanted "$flags_common $flags_psnames" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
create_tfm_slanted "$flags_common $flags_psnames" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
else
create_tfm_upright "$flags_common" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
# Hack required to get the euro currency symbol into TS1 (for ttf2pk)
create_tfm_upright "$flags_common -r .c0x20AC Euro" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_tfm_italic "$flags_common" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
# Hack required to get the euro currency symbol into TS1 (for ttf2pk)
create_tfm_italic "$flags_common -r .c0x20AC Euro" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_tfm_smallcaps_fake "$flags_common" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
# Hack required to get the euro currency symbol into TS1 (for ttf2pk)
create_tfm_smallcaps_fake "$flags_common -r .c0x20AC Euro" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
create_map_warning
create_tfm_slanted "$flags_common" "T1-WGL4.enc" "$texenc_t1" "$rawenc_t1"
# Hack required to get the euro currency symbol into TS1 (for ttf2pk)
create_tfm_slanted "$flags_common -r .c0x20AC Euro" "TS1-AGL.enc" "$texenc_ts1" "$rawenc_ts1"
fi
create_map_end "$basefamily"
create_vf
create_fd "t1${basefamily}.fd" "T1" "$basefamily" "$texenc_t1"
create_fd "ts1${basefamily}.fd" "TS1" "$basefamily" "$texenc_ts1"
if [ $expert = 1 ]; then
create_fd "t1${basefamily}x.fd" "T1" "${basefamily}x" "$texenc_t1x"
create_fd "ts1${basefamily}x.fd" "TS1" "${basefamily}x" "$texenc_ts1x"
create_fd "t1${basefamily}j.fd" "T1" "${basefamily}j" "$texenc_t1j"
create_fd "ts1${basefamily}j.fd" "TS1" "${basefamily}j" "$texenc_ts1x"
fi
if [ $inst = 1 ]; then
install_files
else
sort_files
fi
info "Finished"
# EOF