summaryrefslogtreecommitdiff
path: root/Build
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-11-26 01:57:09 +0000
committerKarl Berry <karl@freefriends.org>2006-11-26 01:57:09 +0000
commit31ff7ecb412ee470d0464bb210a0e9adabed065a (patch)
tree3a6d93ad2c99327f924b7b916db51314d98572b0 /Build
parentbc57bba3992e10b518e1578cef31afba9b226bfa (diff)
update to lcdf-typetools 2.46
git-svn-id: svn://tug.org/texlive/trunk@2536 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build')
-rw-r--r--Build/source/utils/lcdf-typetools/ChangeLog2420
-rw-r--r--Build/source/utils/lcdf-typetools/Makefile.am14
-rw-r--r--Build/source/utils/lcdf-typetools/Makefile.in38
-rw-r--r--Build/source/utils/lcdf-typetools/NEWS93
-rw-r--r--Build/source/utils/lcdf-typetools/README16
-rw-r--r--Build/source/utils/lcdf-typetools/aclocal.m4437
-rw-r--r--Build/source/utils/lcdf-typetools/cfftot1/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/cfftot1/cfftot1.14
-rw-r--r--Build/source/utils/lcdf-typetools/cfftot1/cfftot1.cc6
-rw-r--r--Build/source/utils/lcdf-typetools/cfftot1/maket1font.cc48
-rw-r--r--Build/source/utils/lcdf-typetools/config.h.in4
-rwxr-xr-xBuild/source/utils/lcdf-typetools/configure98
-rw-r--r--Build/source/utils/lcdf-typetools/configure.in15
-rw-r--r--Build/source/utils/lcdf-typetools/depcomp60
-rw-r--r--Build/source/utils/lcdf-typetools/glyphlist.txt132
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/otf.hh17
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/otfcmap.hh8
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/otfdata.hh11
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/otfgpos.hh2
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/otfname.hh4
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/otfpost.hh62
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/pairop.hh2
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/t1cs.hh2
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/t1csgen.hh2
-rw-r--r--Build/source/utils/lcdf-typetools/include/efont/ttfcs.hh39
-rw-r--r--Build/source/utils/lcdf-typetools/include/lcdf/error.hh7
-rw-r--r--Build/source/utils/lcdf-typetools/include/lcdf/hashmap.cc4
-rw-r--r--Build/source/utils/lcdf-typetools/include/lcdf/hashmap.hh58
-rw-r--r--Build/source/utils/lcdf-typetools/include/lcdf/md5.h (renamed from Build/source/utils/lcdf-typetools/otftotfm/md5.h)10
-rwxr-xr-xBuild/source/utils/lcdf-typetools/install-sh17
-rw-r--r--Build/source/utils/lcdf-typetools/lcdf-typetools.spec8
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/Makefile.am4
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/Makefile.in22
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/afm.cc4
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/afmparse.cc26
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/afmw.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/amfm.cc4
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/cff.cc22
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/encoding.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/findmet.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/metrics.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otf.cc192
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfcmap.cc302
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfdata.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfdescrip.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfgpos.cc28
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfgsub.cc34
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfname.cc51
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfos2.cc4
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/otfpost.cc206
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/pairop.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/psres.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1bounds.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1cs.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1csgen.cc3
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1font.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1fontskel.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1interp.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1item.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1mm.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1rw.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/t1unparser.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/libefont/ttfcs.cc225
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/Makefile.am3
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/Makefile.in16
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/bezier.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/clp.c2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/error.cc21
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/filename.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/globmatch.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/landmark.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/md5.c (renamed from Build/source/utils/lcdf-typetools/otftotfm/md5.c)5
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/permstr.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/point.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/slurper.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/straccum.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/string.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/transform.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/liblcdf/vectorv.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/missing23
-rwxr-xr-xBuild/source/utils/lcdf-typetools/mkinstalldirs99
-rw-r--r--Build/source/utils/lcdf-typetools/mmafm/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/mmafm/main.cc4
-rw-r--r--Build/source/utils/lcdf-typetools/mmafm/mmafm.16
-rw-r--r--Build/source/utils/lcdf-typetools/mmpfb/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/mmpfb/main.cc14
-rw-r--r--Build/source/utils/lcdf-typetools/mmpfb/mmpfb.16
-rw-r--r--Build/source/utils/lcdf-typetools/mmpfb/myfont.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/mmpfb/t1minimize.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/mmpfb/t1rewrit.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/otfinfo/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/otfinfo/otfinfo.153
-rw-r--r--Build/source/utils/lcdf-typetools/otfinfo/otfinfo.cc135
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/Makefile.am1
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/Makefile.in13
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/automatic.cc44
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/automatic.hh3
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.cc196
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.hh20
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/glyphfilter.cc11
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.c12
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.h3
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/metrics.cc45
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/metrics.hh14
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/otftotfm.1480
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/otftotfm.cc256
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/otftotfm.hh7
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/secondary.cc209
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/secondary.hh34
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/uniprop.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/util.cc8
-rw-r--r--Build/source/utils/lcdf-typetools/otftotfm/util.hh2
-rw-r--r--Build/source/utils/lcdf-typetools/t1dotlessj/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.14
-rw-r--r--Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.cc8
-rw-r--r--Build/source/utils/lcdf-typetools/t1lint/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/t1lint/cscheck.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/t1lint/t1lint.14
-rw-r--r--Build/source/utils/lcdf-typetools/t1lint/t1lint.cc14
-rw-r--r--Build/source/utils/lcdf-typetools/t1reencode/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/t1reencode/t1reencode.164
-rw-r--r--Build/source/utils/lcdf-typetools/t1reencode/t1reencode.cc468
-rw-r--r--Build/source/utils/lcdf-typetools/t1reencode/util.cc2
-rw-r--r--Build/source/utils/lcdf-typetools/t1testpage/Makefile.in6
-rw-r--r--Build/source/utils/lcdf-typetools/t1testpage/t1testpage.14
-rw-r--r--Build/source/utils/lcdf-typetools/t1testpage/t1testpage.cc4
-rw-r--r--Build/source/utils/lcdf-typetools/texglyphlist.txt132
-rw-r--r--Build/source/utils/lcdf-typetools/ttftotype42/Makefile.am14
-rw-r--r--Build/source/utils/lcdf-typetools/ttftotype42/Makefile.in465
-rw-r--r--Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.178
-rw-r--r--Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.cc380
131 files changed, 4322 insertions, 3943 deletions
diff --git a/Build/source/utils/lcdf-typetools/ChangeLog b/Build/source/utils/lcdf-typetools/ChangeLog
deleted file mode 100644
index 2140f3c0750..00000000000
--- a/Build/source/utils/lcdf-typetools/ChangeLog
+++ /dev/null
@@ -1,2420 +0,0 @@
-2005-02-07 Monday 11:35 kohler
-
- * NEWS (1.91), configure.in (1.105), otftotfm/otftotfm.cc (1.97):
- add Achim Blumensaths --math-spacing and --space-factor options
-
-2005-02-05 Saturday 11:22 kohler
-
- * otftotfm/: automatic.cc (1.41), otftotfm.1 (1.111), otftotfm.cc
- (1.96), util.cc (1.18), util.hh (1.15): Christian Uebber reported
- surprising behavior; document --force and add --verbose info to
- reduce the surprise
-
-2005-02-04 Friday 20:55 kohler
-
- * otftotfm/automatic.cc (1.40): call updmap twice, since updmap
- --enable can exit early and we dont want it to
-
-2005-02-04 Friday 01:32 kohler
-
- * NEWS (1.90): NEWS update
-
-2005-02-04 Friday 01:32 kohler
-
- * otftotfm/glyphfilter.cc (1.6): minor bug
-
-2005-02-04 Friday 01:32 kohler
-
- * otftotfm/: otftotfm.cc (1.95), otftotfm.1 (1.110): remove debug
- output, accept --subs-filter/--alternates-filter
-
-2005-02-04 Friday 01:06 kohler
-
- * NEWS (1.89), otftotfm/util.cc (1.17): nits: on dos/win, dont
- quote
-
-2005-02-03 Thursday 20:28 kohler
-
- * NEWS (1.88), README (1.68), cfftot1/cfftot1.1 (1.64),
- mmafm/mmafm.1 (1.82), mmpfb/mmpfb.1 (1.82),
- t1dotlessj/t1dotlessj.1 (1.28), t1lint/t1lint.1 (1.42),
- t1reencode/t1reencode.1 (1.4), t1testpage/t1testpage.1 (1.40):
- versionize
-
-2005-02-03 Thursday 20:28 kohler
-
- * otftotfm/: automatic.cc (1.39), otftotfm.1 (1.109), otftotfm.cc
- (1.94): nits
-
-2005-02-03 Thursday 20:27 kohler
-
- * otftotfm/glyphfilter.cc (1.5): fix glyph filter unicode ranges
-
-2005-02-03 Thursday 20:27 kohler
-
- * otfinfo/: otfinfo.1 (1.39), otfinfo.cc (1.11): add
- --query-glyphs/-g option
-
-2005-02-03 Thursday 19:06 kohler
-
- * NEWS (1.87), configure.in (1.104), otftotfm/automatic.cc (1.38),
- otftotfm/otftotfm.1 (1.108), otftotfm/otftotfm.cc (1.93),
- otftotfm/otftotfm.hh (1.2), otftotfm/util.hh (1.14): automatic
- mode does updmap out of the box
-
-2005-02-03 Thursday 11:14 kohler
-
- * otftotfm/: automatic.cc (1.37), otftotfm.cc (1.92), util.cc
- (1.16), util.hh (1.13): protect filenames passed to system(),
- spurred by Achim Blumensath
-
-2005-02-03 Thursday 10:41 kohler
-
- * otftotfm/: automatic.cc (1.36), otftotfm.1 (1.107): updates for
- $TEXMFVAR
-
-2005-01-26 Wednesday 09:34 kohler
-
- * NEWS (1.86), README (1.67), configure.in (1.103),
- cfftot1/cfftot1.1 (1.63), mmafm/mmafm.1 (1.81), mmpfb/mmpfb.1
- (1.81), otfinfo/otfinfo.1 (1.38), otftotfm/otftotfm.1 (1.106),
- otftotfm/otftotfm.cc (1.91), t1dotlessj/t1dotlessj.1 (1.27),
- t1lint/t1lint.1 (1.41), t1reencode/t1reencode.1 (1.3),
- t1testpage/t1testpage.1 (1.39): fix bug that was causing infinite
- loops: an obvious || vs. && error, hidden by an #ifdef
-
-2005-01-26 Wednesday 09:00 kohler
-
- * configure.in (1.102), otf.com (1.1): otf.com
-
-2005-01-04 Tuesday 19:55 kohler
-
- * README (1.66): add t1reencode to README
-
-2005-01-04 Tuesday 19:47 kohler
-
- * NEWS (1.85), README (1.65), configure.in (1.101),
- cfftot1/cfftot1.1 (1.62), cfftot1/cfftot1.cc (1.22),
- mmafm/main.cc (1.41), mmafm/mmafm.1 (1.80), mmpfb/main.cc (1.44),
- mmpfb/mmpfb.1 (1.80), otfinfo/otfinfo.1 (1.37),
- otfinfo/otfinfo.cc (1.10), otftotfm/otftotfm.1 (1.105),
- otftotfm/otftotfm.cc (1.90), t1dotlessj/t1dotlessj.1 (1.26),
- t1dotlessj/t1dotlessj.cc (1.7), t1lint/t1lint.1 (1.40),
- t1lint/t1lint.cc (1.17), t1reencode/t1reencode.1 (1.2),
- t1reencode/t1reencode.cc (1.3), t1testpage/t1testpage.1 (1.38),
- t1testpage/t1testpage.cc (1.18): to 2.17
-
-2005-01-04 Tuesday 18:40 kohler
-
- * otftotfm/otftotfm.1 (1.104), otftotfm/otftotfm.cc (1.89),
- t1reencode/Makefile.am (1.2), t1reencode/md5.c (1.1),
- t1reencode/md5.h (1.1), t1reencode/t1reencode.cc (1.2):
- t1reencode updates: almost working, sort of
-
-2005-01-04 Tuesday 11:48 kohler
-
- * .cvsignore (1.4), Makefile.am (1.25), configure.in (1.100),
- t1reencode/.cvsignore (1.1), t1reencode/Makefile.am (1.1),
- t1reencode/t1reencode.1 (1.1), t1reencode/t1reencode.cc (1.1),
- t1reencode/util.cc (1.1), t1reencode/util.hh (1.1): add
- t1reencode (but not sure yet it should be distributed)
-
-2004-11-21 Sunday 11:02 kohler
-
- * t1testpage/t1testpage.cc (1.17): include *.whatever immediately
- after *
-
-2004-11-19 Friday 22:16 kohler
-
- * t1dotlessj/t1dotlessj.1 (1.25): s/J/j/
-
-2004-11-19 Friday 20:46 kohler
-
- * NEWS (1.84), README (1.64), configure.in (1.99),
- lcdf-typetools.spec (1.2), cfftot1/cfftot1.1 (1.61),
- mmafm/mmafm.1 (1.79), mmpfb/mmpfb.1 (1.79), otfinfo/otfinfo.1
- (1.36), otftotfm/glyphfilter.cc (1.4), otftotfm/glyphfilter.hh
- (1.5), otftotfm/otftotfm.1 (1.103), otftotfm/otftotfm.cc (1.88),
- t1dotlessj/t1dotlessj.1 (1.24), t1lint/t1lint.1 (1.39),
- t1testpage/t1testpage.1 (1.37): to version 2.16: include- and
- exclude-alternates updates
-
-2004-10-25 Monday 21:51 kohler
-
- * configure.in (1.98), otftotfm/Makefile.am (1.21): tetex-build
- dependency
-
-2004-10-10 Sunday 12:03 kohler
-
- * configure.in (1.97): more --enable-tetex-build
-
-2004-10-08 Friday 23:53 kohler
-
- * configure.in (1.96): --enable-tetex-build
-
-2004-10-05 Tuesday 16:16 kohler
-
- * configure.in (1.95): add support for --with-kpathsea=texk-local
-
-2004-10-01 Friday 00:42 kohler
-
- * otftotfm/: metrics.cc (1.25), otftotfm.cc (1.87): revert some
- Popineauisms
-
-2004-09-30 Thursday 18:44 kohler
-
- * Makefile.am (1.24), NEWS (1.83), mmpfb/t1rewrit.cc (1.39),
- otftotfm/glyphfilter.cc (1.3), otftotfm/glyphfilter.hh (1.4),
- otftotfm/metrics.cc (1.24), otftotfm/otftotfm.cc (1.86),
- otftotfm/util.hh (1.12), t1testpage/t1testpage.cc (1.16):
- Microsoft CC updates from Fabrice Popineau
-
-2004-09-21 Tuesday 17:10 kohler
-
- * otftotfm/otftotfm.1 (1.102): backtrackabit
-
-2004-09-21 Tuesday 17:00 kohler
-
- * README (1.63), lcdf-typetools.spec (1.1), mmafm/mmafm.1 (1.78),
- mmpfb/mmpfb.1 (1.78), otftotfm/otftotfm.1 (1.101): manpage
- updates from Claire Connelly, and a spec from her too
-
-2004-09-18 Saturday 00:22 kohler
-
- * NEWS (1.82), mmpfb/myfont.hh (1.14): volovich
-
-2004-09-17 Friday 17:26 kohler
-
- * NEWS (1.81), README (1.62), configure.in (1.94),
- cfftot1/cfftot1.1 (1.60), mmafm/mmafm.1 (1.77), mmpfb/mmpfb.1
- (1.77), otfinfo/otfinfo.1 (1.35), otftotfm/otftotfm.1 (1.100),
- t1dotlessj/t1dotlessj.1 (1.23), t1lint/t1lint.1 (1.38),
- t1testpage/t1testpage.1 (1.36): towards 2.15
-
-2004-09-17 Friday 17:18 kohler
-
- * NEWS (1.80), configure.in (1.93), otftotfm/glyphfilter.hh (1.3),
- README (1.61), cfftot1/cfftot1.1 (1.59), mmafm/mmafm.1 (1.76),
- mmpfb/mmpfb.1 (1.76), otfinfo/otfinfo.1 (1.34),
- otftotfm/otftotfm.1 (1.99), t1dotlessj/t1dotlessj.1 (1.22),
- t1lint/t1lint.1 (1.37), t1testpage/t1testpage.1 (1.35): to
- version 2.14
-
-2004-09-12 Sunday 10:08 kohler
-
- * NEWS (1.79), README (1.60), cfftot1/cfftot1.1 (1.58),
- mmafm/mmafm.1 (1.75), mmpfb/mmpfb.1 (1.75), otfinfo/otfinfo.1
- (1.33), otftotfm/automatic.cc (1.35), otftotfm/otftotfm.1 (1.98),
- t1dotlessj/t1dotlessj.1 (1.21), t1lint/t1lint.1 (1.36),
- t1testpage/t1testpage.1 (1.34): versionize, and search both
- $VARTEXMF and $TEXMF (Simon Patarin)
-
-2004-08-21 Saturday 23:24 kohler
-
- * configure.in (1.92): selfauto fix
-
-2004-08-21 Saturday 23:21 kohler
-
- * NEWS (1.78), configure.in (1.91), otftotfm/kpseinterface.c (1.7):
- SELFAUTO support
-
-2004-08-19 Thursday 17:38 kohler
-
- * README (1.59), cfftot1/cfftot1.1 (1.57), mmafm/mmafm.1 (1.74),
- mmpfb/mmpfb.1 (1.74), otfinfo/otfinfo.1 (1.32),
- otftotfm/otftotfm.1 (1.97), t1dotlessj/t1dotlessj.1 (1.20),
- t1lint/t1lint.1 (1.35), t1testpage/t1testpage.1 (1.33): to 2.12
-
-2004-08-19 Thursday 17:35 kohler
-
- * NEWS (1.77), configure.in (1.90), otftotfm/automatic.cc (1.34):
- catch bug that would cause problems on 64-bit machines
-
-2004-08-18 Wednesday 18:25 kohler
-
- * otftotfm/automatic.cc (1.33): another nit
-
-2004-08-18 Wednesday 18:24 kohler
-
- * otftotfm/automatic.cc (1.32): more kpsehell
-
-2004-08-18 Wednesday 18:03 kohler
-
- * otftotfm/automatic.cc (1.31): fix bug wrt tds_1_1 detection
-
-2004-08-18 Wednesday 17:54 kohler
-
- * NEWS (1.76), README (1.58), configure.in (1.89),
- cfftot1/cfftot1.1 (1.56), mmafm/mmafm.1 (1.73), mmpfb/mmpfb.1
- (1.73), otfinfo/otfinfo.1 (1.31), otftotfm/automatic.cc (1.30),
- otftotfm/kpseinterface.c (1.6), otftotfm/kpseinterface.h (1.4),
- otftotfm/otftotfm.1 (1.96), t1dotlessj/t1dotlessj.1 (1.19),
- t1lint/t1lint.1 (1.34), t1testpage/t1testpage.1 (1.32): Olaf
- Weber plan for TDS 1.1 vs. 1.0
-
-2004-08-18 Wednesday 17:42 kohler
-
- * NEWS (1.75), README (1.57), cfftot1/cfftot1.1 (1.55),
- mmafm/mmafm.1 (1.72), mmpfb/mmpfb.1 (1.72), otfinfo/otfinfo.1
- (1.30), otftotfm/otftotfm.1 (1.95), t1dotlessj/t1dotlessj.1
- (1.18), t1lint/t1lint.1 (1.33), t1testpage/t1testpage.1 (1.31):
- release 2.10
-
-2004-08-17 Tuesday 23:16 kohler
-
- * otftotfm/automatic.cc (1.29): fix bug
-
-2004-08-17 Tuesday 19:01 kohler
-
- * NEWS (1.74), configure.in (1.88), otftotfm/automatic.cc (1.28),
- otftotfm/otftotfm.1 (1.94): update for TDS 1.1
-
-2004-08-17 Tuesday 18:56 kohler
-
- * otftotfm/: kpseinterface.c (1.5), kpseinterface.h (1.3): add
- kpsei_var_value
-
-2004-08-10 Tuesday 17:43 kohler
-
- * NEWS (1.73), README (1.56), cfftot1/cfftot1.1 (1.54),
- mmafm/mmafm.1 (1.71), mmpfb/mmpfb.1 (1.71), otfinfo/otfinfo.1
- (1.29), otftotfm/otftotfm.1 (1.93), t1dotlessj/t1dotlessj.1
- (1.17), t1lint/t1lint.1 (1.32), t1testpage/t1testpage.1 (1.30):
- to 2.9
-
-2004-08-10 Tuesday 00:27 kohler
-
- * NEWS (1.72), configure.in (1.87), otftotfm/dvipsencoding.cc
- (1.36), otftotfm/glyphfilter.cc (1.2), otftotfm/glyphfilter.hh
- (1.2), otftotfm/metrics.cc (1.23), otftotfm/metrics.hh (1.13),
- otftotfm/otftotfm.1 (1.92), otftotfm/otftotfm.cc (1.85),
- otftotfm/uniprop.cc (1.3), otftotfm/uniprop.hh (1.3),
- otftotfm/util.cc (1.15), otftotfm/util.hh (1.11): support
- --letter-feature
-
-2004-08-05 Thursday 01:07 kohler
-
- * NEWS (1.71), README (1.55), configure.in (1.86),
- cfftot1/cfftot1.1 (1.53), mmafm/mmafm.1 (1.70), mmpfb/mmpfb.1
- (1.70), otfinfo/otfinfo.1 (1.28), otftotfm/metrics.cc (1.22),
- otftotfm/otftotfm.1 (1.91), otftotfm/otftotfm.cc (1.84),
- t1dotlessj/t1dotlessj.1 (1.16), t1lint/t1lint.1 (1.31),
- t1testpage/t1testpage.1 (1.29): to 2.8: catch thrown errors from
- Gsub and Gpos constructors
-
-2004-08-03 Tuesday 18:23 kohler
-
- * NEWS (1.70), README (1.54), configure.in (1.85),
- cfftot1/cfftot1.1 (1.52), mmafm/mmafm.1 (1.69), mmpfb/mmpfb.1
- (1.69), otfinfo/otfinfo.1 (1.27), otftotfm/otftotfm.1 (1.90),
- otftotfm/otftotfm.cc (1.83), t1dotlessj/t1dotlessj.1 (1.15),
- t1lint/t1lint.1 (1.30), t1testpage/t1testpage.1 (1.28): to 2.7
-
-2004-07-12 Monday 19:15 kohler
-
- * NEWS (1.69), README (1.53), configure.in (1.84),
- cfftot1/cfftot1.1 (1.51), mmafm/mmafm.1 (1.68), mmpfb/mmpfb.1
- (1.68), otfinfo/otfinfo.1 (1.26), otftotfm/otftotfm.1 (1.89),
- t1dotlessj/t1dotlessj.1 (1.14), t1lint/t1lint.1 (1.29),
- t1testpage/t1testpage.1 (1.27): versionize
-
-2004-07-12 Monday 19:13 kohler
-
- * t1testpage/: t1testpage.1 (1.26), t1testpage.cc (1.15):
- t1testpage adds --glyph and --smoke options
-
-2004-07-12 Monday 19:12 kohler
-
- * Makefile.am (1.23), liblcdf/Makefile.am (1.6),
- otftotfm/dvipsencoding.hh (1.24), otftotfm/util.cc (1.14),
- otftotfm/util.hh (1.10): liblcdf adds globmatch
-
-2004-07-06 Tuesday 16:57 kohler
-
- * NEWS (1.68), README (1.52), configure.in (1.83),
- cfftot1/cfftot1.1 (1.50), mmafm/mmafm.1 (1.67), mmpfb/mmpfb.1
- (1.67), otfinfo/otfinfo.1 (1.25), otftotfm/otftotfm.1 (1.88),
- t1dotlessj/t1dotlessj.1 (1.13), t1lint/t1lint.1 (1.28),
- t1testpage/t1testpage.1 (1.25): version update
-
-2004-06-30 Wednesday 09:56 kohler
-
- * NEWS (1.67), README (1.51), configure.in (1.82),
- cfftot1/cfftot1.1 (1.49), mmafm/mmafm.1 (1.66), mmpfb/mmpfb.1
- (1.66), otfinfo/otfinfo.1 (1.24), otftotfm/otftotfm.1 (1.87),
- t1dotlessj/t1dotlessj.1 (1.12), t1lint/t1lint.1 (1.27),
- t1testpage/t1testpage.1 (1.24): to 2.4
-
-2004-06-15 Tuesday 23:51 kohler
-
- * glyphlist.txt (1.12), otftotfm/secondary.cc (1.15),
- otftotfm/secondary.hh (1.11): support F{F,I,L,FI,FL}small (Ulrich
- Dirr)
-
-2004-06-15 Tuesday 21:56 kohler
-
- * otftotfm/dvipsencoding.cc (1.35): comment update
-
-2004-06-15 Tuesday 21:55 kohler
-
- * otftotfm/: dvipsencoding.cc (1.34), dvipsencoding.hh (1.23),
- metrics.cc (1.21), metrics.hh (1.12), otftotfm.cc (1.82),
- secondary.cc (1.14), secondary.hh (1.10): store Unicode
- information in Metrics, not DvipsEncoding
-
-2004-06-15 Tuesday 21:54 kohler
-
- * otftotfm/: Makefile.am (1.20), glyphfilter.cc (1.1),
- glyphfilter.hh (1.1): add glyphfilter
-
-2004-06-15 Tuesday 21:53 kohler
-
- * mkuniprop.pl (1.2), otftotfm/uniprop.cc (1.2),
- otftotfm/uniprop.hh (1.2): add parse_property
-
-2004-06-15 Tuesday 09:32 kohler
-
- * otftotfm/otftotfm.1 (1.86): doc nits
-
-2004-06-15 Tuesday 09:27 kohler
-
- * otftotfm/otftotfm.1 (1.85): nit
-
-2004-06-15 Tuesday 09:26 kohler
-
- * NEWS (1.66), README (1.50), configure.in (1.81),
- cfftot1/cfftot1.1 (1.48), mmafm/mmafm.1 (1.65), mmpfb/mmpfb.1
- (1.65), otfinfo/otfinfo.1 (1.23), otftotfm/dvipsencoding.cc
- (1.33), otftotfm/dvipsencoding.hh (1.22), otftotfm/otftotfm.1
- (1.84), otftotfm/otftotfm.cc (1.81), t1dotlessj/t1dotlessj.1
- (1.11), t1lint/t1lint.1 (1.26), t1testpage/t1testpage.1 (1.23):
- to 2.3: --default-ligkern et al
-
-2004-06-14 Monday 21:01 kohler
-
- * mkuniprop.pl (1.1), otftotfm/uniprop.cc (1.1),
- otftotfm/uniprop.hh (1.1): add UnicodeProperty
-
-2004-05-26 Wednesday 22:42 kohler
-
- * README (1.49): update README
-
-2004-05-08 Saturday 09:32 kohler
-
- * NEWS (1.65), README (1.48), configure.in (1.80),
- cfftot1/cfftot1.1 (1.47), mmafm/mmafm.1 (1.64), mmpfb/mmpfb.1
- (1.64), otfinfo/otfinfo.1 (1.22), otftotfm/otftotfm.1 (1.83),
- t1dotlessj/t1dotlessj.1 (1.10), t1lint/t1lint.1 (1.25),
- t1testpage/t1testpage.1 (1.22): bump version
-
-2004-05-08 Saturday 09:31 kohler
-
- * otftotfm/: automatic.cc (1.27), otftotfm.cc (1.80), secondary.cc
- (1.13), secondary.hh (1.9), util.hh (1.9): pay attention to
- t1dotlessj exit status and use a regular "j" as a dotless "j" if
- no dot was found. Also support "--force" (untested), and make
- t1dotlessj errors into warnings (so that otftotfm finishes all of
- its tasks even if t1dotlessj bombs out, reported by Stephen Moye)
-
-2004-05-08 Saturday 09:29 kohler
-
- * t1dotlessj/: t1dotlessj.1 (1.9), t1dotlessj.cc (1.6): exit with
- different status depending on the error
-
-2004-04-18 Sunday 13:15 kohler
-
- * otftotfm/otftotfm.1 (1.82): improve -faalt description
-
-2004-04-05 Monday 03:25 kohler
-
- * NEWS (1.64), README (1.47), configure.in (1.79),
- cfftot1/cfftot1.1 (1.46), mmafm/mmafm.1 (1.63), mmpfb/mmpfb.1
- (1.63), otfinfo/otfinfo.1 (1.21), otftotfm/otftotfm.1 (1.81),
- otftotfm/otftotfm.cc (1.79), t1dotlessj/t1dotlessj.1 (1.8),
- t1lint/t1lint.1 (1.24), t1testpage/t1testpage.1 (1.21): to 2.1:
- improve documentation for otftotfm; otftotfm warns on missing
- encoding file
-
-2004-03-28 Sunday 10:46 kohler
-
- * glyphlist.txt (1.11): add fontinst synonyms
-
-2004-03-21 Sunday 19:45 kohler
-
- * NEWS (1.63), ONEWS (1.2), README (1.46), configure.in (1.78),
- cfftot1/cfftot1.1 (1.45), cfftot1/cfftot1.cc (1.21),
- cfftot1/maket1font.cc (1.21), mmafm/main.cc (1.40), mmafm/mmafm.1
- (1.62), mmpfb/mmpfb.1 (1.62), mmpfb/myfont.cc (1.39),
- mmpfb/t1minimize.cc (1.6), mmpfb/t1rewrit.cc (1.38),
- otfinfo/otfinfo.1 (1.20), otfinfo/otfinfo.cc (1.9),
- otftotfm/automatic.cc (1.26), otftotfm/dvipsencoding.cc (1.32),
- otftotfm/metrics.cc (1.20), otftotfm/otftotfm.1 (1.80),
- otftotfm/otftotfm.cc (1.78), otftotfm/secondary.cc (1.12),
- otftotfm/util.cc (1.13), t1dotlessj/t1dotlessj.1 (1.7),
- t1lint/cscheck.cc (1.13), t1lint/t1lint.1 (1.23),
- t1testpage/t1testpage.1 (1.20): to 2.0, and update copyrights
-
-2004-03-21 Sunday 19:36 kohler
-
- * mmpfb/main.cc (1.43), t1dotlessj/t1dotlessj.cc (1.5),
- t1lint/t1lint.cc (1.16), t1testpage/t1testpage.cc (1.14): add
- _O_BINARY flag on Windows when appropriate; also update copyright
-
-2004-02-24 Tuesday 11:38 kohler
-
- * otftotfm/: metrics.cc (1.19), otftotfm.1 (1.79): nits
-
-2004-02-24 Tuesday 11:20 kohler
-
- * README (1.45), configure.in (1.77), cfftot1/cfftot1.1 (1.44),
- mmafm/mmafm.1 (1.61), mmpfb/mmpfb.1 (1.61), otfinfo/otfinfo.1
- (1.19), otftotfm/otftotfm.1 (1.78), t1dotlessj/t1dotlessj.1
- (1.6), t1lint/t1lint.1 (1.22), t1testpage/t1testpage.1 (1.19): to
- 1.99
-
-2004-02-24 Tuesday 11:18 kohler
-
- * NEWS (1.62), otftotfm/metrics.cc (1.18): small change improves
- performance a lot: don't do unnecessary work
-
-2004-02-24 Tuesday 10:43 kohler
-
- * otftotfm/: metrics.cc (1.17), otftotfm.cc (1.77): fix bug
- reported by Adam Lindsay: a context ligature was included even
- though it referred to a nonexistent character
-
-2004-02-24 Tuesday 10:08 kohler
-
- * otftotfm/metrics.cc (1.16): a better error message
-
-2004-02-22 Sunday 01:37 kohler
-
- * NEWS (1.61), README (1.44), configure.in (1.76),
- cfftot1/cfftot1.1 (1.43), mmafm/mmafm.1 (1.60), mmpfb/mmpfb.1
- (1.60), otfinfo/otfinfo.1 (1.18), otftotfm/otftotfm.1 (1.77),
- t1dotlessj/t1dotlessj.1 (1.5), t1lint/t1lint.1 (1.21),
- t1testpage/t1testpage.1 (1.18): to version 1.98
-
-2004-02-22 Sunday 01:33 kohler
-
- * glyphlist.txt (1.10), otftotfm/dvipsencoding.cc (1.31),
- otftotfm/secondary.cc (1.11): add support for SSsmall (Einar
- Smith)
-
-2004-02-22 Sunday 01:32 kohler
-
- * otftotfm/: automatic.cc (1.25), automatic.hh (1.7), otftotfm.cc
- (1.76), util.cc (1.12), util.hh (1.8): rename nocreate to
- no_create to fix compilation problems (reported by Nelson Beebe)
-
-2004-02-06 Friday 21:47 kohler
-
- * NEWS (1.60), README (1.43), configure.in (1.75),
- cfftot1/cfftot1.1 (1.42), mmafm/mmafm.1 (1.59), mmpfb/mmpfb.1
- (1.59), otfinfo/otfinfo.1 (1.17), otftotfm/otftotfm.1 (1.76),
- t1dotlessj/t1dotlessj.1 (1.4), t1lint/t1lint.1 (1.20),
- t1testpage/t1testpage.1 (1.17): to 1.97
-
-2004-01-11 Sunday 13:02 kohler
-
- * otftotfm/dvipsencoding.cc (1.30): C++-style string iteration
-
-2004-01-11 Sunday 12:52 kohler
-
- * README (1.42), cfftot1/cfftot1.1 (1.41), mmafm/mmafm.1 (1.58),
- mmpfb/mmpfb.1 (1.58), otfinfo/otfinfo.1 (1.16),
- otftotfm/otftotfm.1 (1.75), t1dotlessj/t1dotlessj.1 (1.3),
- t1lint/t1lint.1 (1.19), t1testpage/t1testpage.1 (1.16):
- versionize
-
-2004-01-11 Sunday 12:51 kohler
-
- * NEWS (1.59), configure.in (1.74), otftotfm/dvipsencoding.cc
- (1.29): to 1.96: respect "Q.alt" and the like in input encoding
-
-2004-01-05 Monday 08:35 kohler
-
- * t1dotlessj/t1dotlessj.cc (1.4): font_name fix for Forte C++, from
- Tom Kacvinsky
-
-2004-01-03 Saturday 22:18 kohler
-
- * otftotfm/otftotfm.1 (1.74): mention t1dotlessj in SEE ALSO
-
-2004-01-03 Saturday 21:48 kohler
-
- * NEWS (1.58), configure.in (1.73), otftotfm/Makefile.am (1.19),
- otftotfm/otftotfm.1 (1.72), README (1.41), cfftot1/cfftot1.1
- (1.40), mmafm/mmafm.1 (1.57), mmpfb/mmpfb.1 (1.57),
- otfinfo/otfinfo.1 (1.15), otftotfm/otftotfm.1 (1.73),
- t1dotlessj/t1dotlessj.1 (1.2), t1lint/t1lint.1 (1.18),
- t1testpage/t1testpage.1 (1.15): to 1.95
-
-2004-01-03 Saturday 21:48 kohler
-
- * otftotfm/: secondary.cc (1.10), secondary.hh (1.8): support
- dotless-j generation
-
-2004-01-03 Saturday 21:47 kohler
-
- * otftotfm/: otftotfm.cc (1.75), otftotfm.hh (1.1): support virtual
- fonts that refer to more than one base font (for dotless-j
- support); avoid bad "(STOP)" commands; refactor code to introduce
- output_metrics() function (used by dotless-j support)
-
-2004-01-03 Saturday 21:45 kohler
-
- * otftotfm/: metrics.cc (1.15), metrics.hh (1.11): add
- design_units(); and support multiple fonts: add Setting::FONT,
- and a mapped_fonts() array
-
-2004-01-03 Saturday 21:44 kohler
-
- * otftotfm/: dvipsencoding.cc (1.28), dvipsencoding.hh (1.21):
- nits, including a fix for glyphlist.txt multi-possibility lines
- (like "dotlessj;0237;FB36"); use String::iterator; adapt to
- Secondary changes
-
-2004-01-03 Saturday 21:42 kohler
-
- * otftotfm/automatic.cc (1.24): create Type 1 fonts even in
- non-automatic mode, and jigger error messages
-
-2003-12-31 Wednesday 10:42 kohler
-
- * NEWS (1.57), configure.in (1.72), otftotfm/automatic.cc (1.23),
- otftotfm/automatic.hh (1.6), otftotfm/metrics.cc (1.14),
- otftotfm/metrics.hh (1.10), otftotfm/otftotfm.cc (1.74),
- otftotfm/secondary.cc (1.9): to 1.91
-
-2003-12-30 Tuesday 14:39 kohler
-
- * t1dotlessj/t1dotlessj.cc (1.3): nit
-
-2003-12-30 Tuesday 14:39 kohler
-
- * t1dotlessj/: Makefile.am (1.2), t1dotlessj.cc (1.2): to version
- 1.90: include t1dotlessj.1, some updates also to the code
-
-2003-12-30 Tuesday 14:37 kohler
-
- * NEWS (1.56), README (1.40), configure.in (1.71),
- cfftot1/cfftot1.1 (1.39), mmafm/mmafm.1 (1.56), mmpfb/mmpfb.1
- (1.56), otfinfo/otfinfo.1 (1.14), otftotfm/otftotfm.1 (1.71),
- t1dotlessj/t1dotlessj.1 (1.1), t1lint/t1lint.1 (1.17),
- t1testpage/t1testpage.1 (1.14): to version 1.90
-
-2003-12-29 Monday 02:01 kohler
-
- * Makefile.am (1.22), configure.in (1.70), t1dotlessj/.cvsignore
- (1.1), t1dotlessj/Makefile.am (1.1), t1dotlessj/t1dotlessj.cc
- (1.1): add t1dotlessj
-
-2003-12-29 Monday 02:01 kohler
-
- * t1lint/cscheck.cc (1.12): adapt to _careful change: t1lint should
- be careful
-
-2003-12-29 Monday 02:00 kohler
-
- * cfftot1/maket1font.cc (1.20), mmpfb/t1minimize.cc (1.5): adapt to
- Type1CharstringGenInterp changes
-
-2003-12-28 Sunday 10:32 kohler
-
- * cfftot1/maket1font.cc (1.19): use Type1CharstringGenInterp
-
-2003-12-28 Sunday 00:23 kohler
-
- * NEWS (1.55), cfftot1/maket1font.cc (1.18), libefont/Makefile.am
- (1.12), mmpfb/t1minimize.cc (1.4): adapt to t1font::skeleton
- stuff
-
-2003-12-23 Tuesday 11:09 kohler
-
- * README (1.39), cfftot1/cfftot1.1 (1.38), mmafm/mmafm.1 (1.55),
- mmpfb/mmpfb.1 (1.55), otfinfo/otfinfo.1 (1.13),
- otftotfm/otftotfm.1 (1.70), t1lint/t1lint.1 (1.16),
- t1testpage/t1testpage.1 (1.13): to 1.88
-
-2003-12-23 Tuesday 11:08 kohler
-
- * NEWS (1.54), configure.in (1.69), otfinfo/otfinfo.cc (1.8): 1.88:
- use more STL instead of homegrown find() template for
- compatibility with older GCCs
-
-2003-12-23 Tuesday 11:07 kohler
-
- * cfftot1/cfftot1.1 (1.37), mmafm/mmafm.1 (1.54), mmpfb/mmpfb.1
- (1.54), otfinfo/otfinfo.1 (1.12), otftotfm/otftotfm.1 (1.69),
- t1lint/t1lint.1 (1.15), t1testpage/t1testpage.1 (1.12), README
- (1.38): to 1.87
-
-2003-12-22 Monday 21:43 kohler
-
- * NEWS (1.53), configure.in (1.68), otftotfm/otftotfm.cc (1.73),
- otftotfm/secondary.cc (1.8), otftotfm/secondary.hh (1.7): fix
- Ulrich Dirr --extend bug: extend factor was applied to font
- height, not width; and apply extend factor to XHEIGHT SPACE and
- other font dimensoins
-
-2003-12-19 Friday 10:22 kohler
-
- * NEWS (1.52), README (1.37), configure.in (1.67),
- cfftot1/cfftot1.1 (1.36), mmafm/mmafm.1 (1.53), mmpfb/mmpfb.1
- (1.53), otfinfo/otfinfo.1 (1.11), otftotfm/otftotfm.1 (1.68),
- otftotfm/otftotfm.cc (1.72), t1lint/t1lint.1 (1.14),
- t1testpage/t1testpage.1 (1.11): to 1.86
-
-2003-12-10 Wednesday 17:40 kohler
-
- * otftotfm/otftotfm.1 (1.67): oopslet
-
-2003-12-10 Wednesday 12:20 kohler
-
- * NEWS (1.51), README (1.36), configure.in (1.66),
- cfftot1/cfftot1.1 (1.35), mmafm/mmafm.1 (1.52), mmpfb/mmpfb.1
- (1.52), otfinfo/otfinfo.1 (1.10), t1lint/t1lint.1 (1.13),
- t1testpage/t1testpage.1 (1.10): versionize
-
-2003-12-10 Wednesday 12:20 kohler
-
- * otftotfm/: otftotfm.1 (1.66), otftotfm.cc (1.71): add
- --altselector-feature mechanism; default to salt+dlig, not
- aalt+dlig; allow --altselector=CHAR and --altselector-char=CHAR
- instead of numbers
-
-2003-12-10 Wednesday 12:18 kohler
-
- * otftotfm/automatic.cc (1.22): oops: fix intermittend hang caused
- by bonehead error
-
-2003-12-05 Friday 10:22 kohler
-
- * otftotfm/otftotfm.1 (1.65): a/an nit
-
-2003-12-04 Thursday 17:33 kohler
-
- * NEWS (1.50), glyphlist.txt (1.9): fix Ulrichs problem with SS
-
-2003-12-04 Thursday 17:13 kohler
-
- * otftotfm/metrics.cc (1.13): alternates bitlet
-
-2003-12-04 Thursday 17:02 kohler
-
- * NEWS (1.49), README (1.35), configure.in (1.65), glyphlist.txt
- (1.8), cfftot1/cfftot1.1 (1.34), mmafm/mmafm.1 (1.51),
- mmpfb/mmpfb.1 (1.51), otfinfo/otfinfo.1 (1.9),
- otftotfm/dvipsencoding.cc (1.27), otftotfm/dvipsencoding.hh
- (1.20), otftotfm/metrics.cc (1.12), otftotfm/metrics.hh (1.9),
- otftotfm/otftotfm.1 (1.64), otftotfm/otftotfm.cc (1.70),
- otftotfm/secondary.cc (1.7), otftotfm/secondary.hh (1.6),
- otftotfm/util.cc (1.11), otftotfm/util.hh (1.7), t1lint/t1lint.1
- (1.12), t1testpage/t1testpage.1 (1.9): to 1.80: support
- --altselector-char, --include-alternates, and
- --exclude-alternates
-
-2003-12-03 Wednesday 17:19 kohler
-
- * NEWS (1.48), README (1.34), configure.in (1.64),
- cfftot1/cfftot1.1 (1.33), mmafm/mmafm.1 (1.50), mmpfb/mmpfb.1
- (1.50), otfinfo/otfinfo.1 (1.8), otftotfm/otftotfm.1 (1.63),
- t1lint/t1lint.1 (1.11), t1testpage/t1testpage.1 (1.8): to 1.75;
- only changes to NEWS (bug fix was in library)
-
-2003-12-01 Monday 11:33 kohler
-
- * configure.in (1.63): check explicitly for fabs
-
-2003-12-01 Monday 11:28 kohler
-
- * NEWS (1.47), README (1.33), configure.in (1.62),
- cfftot1/cfftot1.1 (1.32), mmafm/main.cc (1.39), mmafm/mmafm.1
- (1.49), mmpfb/mmpfb.1 (1.49), otfinfo/otfinfo.1 (1.7),
- otftotfm/otftotfm.1 (1.62), otftotfm/otftotfm.cc (1.69),
- t1lint/t1lint.1 (1.10), t1testpage/t1testpage.1 (1.7): to version
- 1.70: add --min-kern to otftotfm; add --min-kern synonym to mmafm
-
-2003-11-29 Saturday 09:48 kohler
-
- * NEWS (1.46), README (1.32), configure.in (1.61),
- cfftot1/cfftot1.1 (1.31), mmafm/mmafm.1 (1.48), mmpfb/mmpfb.1
- (1.48), otfinfo/otfinfo.1 (1.6), otftotfm/otftotfm.1 (1.61),
- otftotfm/otftotfm.cc (1.68), t1lint/t1lint.1 (1.9),
- t1testpage/t1testpage.1 (1.6): to 1.67: fix minor bug
- reported/patch provided/ by Akira Kakuto
-
-2003-11-24 Monday 09:53 kohler
-
- * NEWS (1.45), README (1.31), configure.in (1.60),
- cfftot1/cfftot1.1 (1.30), cfftot1/maket1font.cc (1.17),
- mmafm/mmafm.1 (1.47), mmpfb/mmpfb.1 (1.47), otfinfo/otfinfo.1
- (1.5), otftotfm/otftotfm.1 (1.60), t1lint/t1lint.1 (1.8),
- t1testpage/t1testpage.1 (1.5): to 1.66: currentfile eexec
- duplication
-
-2003-11-24 Monday 07:50 kohler
-
- * NEWS (1.44), README (1.30), configure.in (1.59),
- cfftot1/cfftot1.1 (1.29), mmafm/mmafm.1 (1.46), mmpfb/mmpfb.1
- (1.46), otfinfo/otfinfo.1 (1.4), otftotfm/automatic.cc (1.21),
- otftotfm/dvipsencoding.cc (1.26), otftotfm/dvipsencoding.hh
- (1.19), otftotfm/otftotfm.1 (1.59), otftotfm/otftotfm.cc (1.67),
- t1lint/t1lint.1 (1.7), t1testpage/t1testpage.1 (1.4): to version
- 1.65
-
-2003-11-16 Sunday 19:24 kohler
-
- * otftotfm/metrics.hh (1.8): adapt to newer Vector
-
-2003-11-08 Saturday 11:24 kohler
-
- * cfftot1/cfftot1.cc (1.20), otftotfm/otftotfm.cc (1.66): support
- for CID-keyed CFF fonts
-
-2003-10-21 Tuesday 17:39 kohler
-
- * mmafm/mmafm.1 (1.45): mention multiple master metrics archive
-
-2003-10-17 Friday 15:58 kohler
-
- * Makefile.am (1.21), NEWS (1.43), README (1.29), configure.in
- (1.58), cfftot1/cfftot1.1 (1.28), cfftot1/maket1font.cc (1.16),
- mmafm/mmafm.1 (1.44), mmpfb/mmpfb.1 (1.45), mmpfb/t1rewrit.cc
- (1.37), mmpfb/t1rewrit.hh (1.17), otfinfo/otfinfo.1 (1.3),
- otftotfm/automatic.cc (1.20), otftotfm/otftotfm.1 (1.58),
- otftotfm/otftotfm.cc (1.65), otftotfm/secondary.cc (1.6),
- t1lint/cscheck.cc (1.11), t1lint/cscheck.hh (1.7),
- t1lint/t1lint.1 (1.6), t1lint/t1lint.cc (1.15),
- t1testpage/t1testpage.1 (1.3): versionization, and cope with
- efont changes
-
-2003-10-02 Thursday 19:45 kohler
-
- * otftotfm/otftotfm.1 (1.57): minor man page update
-
-2003-09-04 Thursday 10:53 kohler
-
- * NEWS (1.42), README (1.28), configure.in (1.57),
- cfftot1/cfftot1.1 (1.27), mmafm/mmafm.1 (1.43), mmpfb/mmpfb.1
- (1.44), otftotfm/otftotfm.1 (1.56), t1testpage/t1testpage.1
- (1.2): versionize
-
-2003-09-04 Thursday 10:50 kohler
-
- * t1lint/t1lint.1 (1.5): oops
-
-2003-09-04 Thursday 10:49 kohler
-
- * otftotfm/: otftotfm.1 (1.55), otftotfm.cc (1.64): add
- --design-size option
-
-2003-09-04 Thursday 10:48 kohler
-
- * t1testpage/: Makefile.am (1.6), t1testpage.1 (1.1), t1testpage.cc
- (1.13): fix --help and add manual page
-
-2003-09-04 Thursday 10:48 kohler
-
- * mmafm/main.cc (1.38), mmpfb/main.cc (1.42): name nit
-
-2003-09-02 Tuesday 15:16 kohler
-
- * NEWS (1.41), README (1.27), configure.in (1.56),
- cfftot1/cfftot1.1 (1.26), mmafm/mmafm.1 (1.42), mmpfb/mmpfb.1
- (1.43), otftotfm/otftotfm.1 (1.54), otftotfm/otftotfm.cc (1.63),
- t1lint/t1lint.1 (1.4): set DESIGNSIZE to the font's actual design
- size, from the "size" feature
-
-2003-08-28 Thursday 20:31 kohler
-
- * cfftot1/cfftot1.cc (1.19), mmafm/main.cc (1.37), mmpfb/main.cc
- (1.41), otfinfo/otfinfo.cc (1.7), otftotfm/otftotfm.cc (1.62),
- t1lint/t1lint.cc (1.14), t1testpage/t1testpage.cc (1.12): update
- type of main()
-
-2003-08-26 Tuesday 15:26 kohler
-
- * NEWS (1.40), README (1.26), configure.in (1.55),
- cfftot1/Makefile.am (1.10), cfftot1/cfftot1.1 (1.25),
- libefont/Makefile.am (1.11), liblcdf/Makefile.am (1.5),
- mmafm/Makefile.am (1.12), mmafm/mmafm.1 (1.41), mmpfb/Makefile.am
- (1.13), mmpfb/mmpfb.1 (1.42), otfinfo/Makefile.am (1.2),
- otfinfo/otfinfo.cc (1.6), otftotfm/Makefile.am (1.18),
- otftotfm/otftotfm.1 (1.53), t1lint/Makefile.am (1.11),
- t1lint/t1lint.1 (1.3), t1testpage/Makefile.am (1.5): release 1.50
-
-2003-08-25 Monday 13:05 kohler
-
- * NEWS (1.39): more news
-
-2003-08-25 Monday 11:44 kohler
-
- * NEWS (1.38), configure.in (1.54), otftotfm/automatic.cc (1.19):
- KPATHSEA screwup
-
-2003-08-24 Sunday 17:28 kohler
-
- * NEWS (1.37), README (1.25): update NEWS
-
-2003-08-24 Sunday 17:21 kohler
-
- * otfinfo/otfinfo.cc (1.5): nit
-
-2003-08-24 Sunday 17:20 kohler
-
- * Makefile.am (1.20), README (1.24), cfftot1/cfftot1.1 (1.24),
- libefont/Makefile.am (1.10), mmafm/mmafm.1 (1.40), mmpfb/mmpfb.1
- (1.41), otfinfo/otfinfo.1 (1.2), otfinfo/otfinfo.cc (1.4),
- otftotfm/otftotfm.1 (1.52), otftotfm/otftotfm.cc (1.61),
- t1lint/t1lint.1 (1.2): versionize; move --query-scripts and
- --query-features out of otftotfm; otfinfo manpage rework
-
-2003-08-24 Sunday 14:49 kohler
-
- * otfinfo/otfinfo.cc (1.3), otftotfm/otftotfm.cc (1.60): use new
- interfaces
-
-2003-08-24 Sunday 14:31 kohler
-
- * otftotfm/metrics.cc (1.11): fix bug reported by Adam Lindsay with
- non-boundarychar encodings
-
-2003-08-24 Sunday 14:13 kohler
-
- * cfftot1/cfftot1.cc (1.18), mmafm/main.cc (1.36), mmpfb/main.cc
- (1.40), otfinfo/.cvsignore (1.1), otfinfo/otfinfo.cc (1.2),
- otftotfm/automatic.cc (1.18), otftotfm/metrics.hh (1.7),
- otftotfm/otftotfm.cc (1.59), t1lint/t1lint.cc (1.13),
- t1testpage/t1testpage.cc (1.11): Tom Kacvinsky provides patches
- for Solaris
-
-2003-08-23 Saturday 15:46 kohler
-
- * Makefile.am (1.19), configure.in (1.53): support recent changes
-
-2003-08-23 Saturday 15:46 kohler
-
- * otftotfm/: automatic.cc (1.17), automatic.hh (1.5), otftotfm.1
- (1.51), otftotfm.cc (1.58), secondary.cc (1.5): run
- TEXMF/dvips/updmap if present when appropriate
-
-2003-08-23 Saturday 15:46 kohler
-
- * cfftot1/cfftot1.cc (1.17), otftotfm/dvipsencoding.cc (1.25),
- otftotfm/metrics.cc (1.10), otftotfm/util.cc (1.10),
- t1lint/t1lint.cc (1.12), t1testpage/t1testpage.cc (1.10): revert
- #include style for C includes
-
-2003-08-23 Saturday 15:11 kohler
-
- * otfinfo/: Makefile.am (1.1), otfinfo.1 (1.1), otfinfo.cc (1.1):
- add preliminary otfinfo
-
-2003-08-20 Wednesday 13:39 kohler
-
- * mmafm/main.cc (1.35), mmpfb/main.cc (1.39):
- s/mminstance/typetools/
-
-2003-08-20 Wednesday 12:34 kohler
-
- * Makefile.am (1.18), NEWS (1.36), ONEWS (1.1), README (1.23),
- configure.in (1.52), cfftot1/cfftot1.1 (1.23), mmafm/mmafm.1
- (1.39), mmpfb/mmpfb.1 (1.40), otftotfm/otftotfm.1 (1.50),
- t1lint/Makefile.am (1.10), t1lint/t1lint.1 (1.1),
- t1lint/t1lint.cc (1.11): add manual page for t1lint and fix its
- --help; integrate mmafm and mmpfb
-
-2003-08-14 Thursday 17:05 kohler
-
- * configure.in (1.51), otftotfm/automatic.cc (1.16),
- otftotfm/dvipsencoding.hh (1.18), t1lint/cscheck.cc (1.10),
- t1testpage/t1testpage.cc (1.9): compilation fixes
-
-2003-08-14 Thursday 16:54 kohler
-
- * mmafm/main.cc (1.34), mmafm/mmafm.1 (1.38), mmpfb/main.cc (1.38),
- mmpfb/mmpfb.1 (1.39), mmpfb/myfont.cc (1.38), mmpfb/t1minimize.cc
- (1.3), mmpfb/t1rewrit.cc (1.36): compatibility changes from
- Fabrice
-
-2003-08-12 Tuesday 14:49 kohler
-
- * configure.in (1.50), cfftot1/maket1font.cc (1.15),
- otftotfm/automatic.cc (1.15), otftotfm/md5.c (1.2),
- otftotfm/metrics.hh (1.6), otftotfm/otftotfm.cc (1.57),
- otftotfm/secondary.hh (1.5): fabrice popineau patches
-
-2003-08-11 Monday 13:47 kohler
-
- * mmafm/mmafm.1 (1.37), mmpfb/mmpfb.1 (1.38): to 1.26.1
-
-2003-08-10 Sunday 15:52 kohler
-
- * configure.in (1.49), t1lint/t1lint.cc (1.10): minor configury
-
-2003-08-10 Sunday 14:39 kohler
-
- * mmafm/mmafm.1 (1.36), mmpfb/mmpfb.1 (1.37): Beebenits configury
- etc.
-
-2003-08-10 Sunday 11:46 kohler
-
- * otftotfm/otftotfm.1 (1.49): thank Marco in the manpage
-
-2003-08-10 Sunday 11:42 kohler
-
- * Makefile.am (1.17), README (1.22), cfftot1/cfftot1.1 (1.22),
- otftotfm/otftotfm.1 (1.48): versionize to 0.53
-
-2003-08-10 Sunday 11:38 kohler
-
- * NEWS (1.35), configure.in (1.48), otftotfm/metrics.cc (1.9),
- otftotfm/otftotfm.1 (1.47): fix emptyslot bug reported by Marco
-
-2003-08-10 Sunday 10:45 kohler
-
- * NEWS (1.34), otftotfm/automatic.cc (1.14), otftotfm/otftotfm.1
- (1.46), otftotfm/otftotfm.cc (1.56): integrate Adams suggested
- changes: fix cfftot1 invocation with --without-kpathsea, include
- OTF file when theres no T1 file
-
-2003-08-07 Thursday 13:50 kohler
-
- * mmafm/main.cc (1.33), mmafm/mmafm.1 (1.35), mmpfb/mmpfb.1 (1.36):
- build updates to try to address problems reported by Nelson Beebe
-
-2003-08-07 Thursday 13:43 kohler
-
- * Makefile.am (1.16), NEWS (1.33), README (1.21), configure.in
- (1.47), cfftot1/cfftot1.1 (1.21), libefont/Makefile.am (1.9),
- liblcdf/Makefile.am (1.4), otftotfm/otftotfm.1 (1.45): to version
- 0.52
-
-2003-08-07 Thursday 12:56 kohler
-
- * NEWS (1.32), configure.in (1.46), otftotfm/kpseinterface.c (1.4),
- otftotfm/kpseinterface.h (1.2), otftotfm/metrics.cc (1.8),
- otftotfm/metrics.hh (1.5), otftotfm/otftotfm.1 (1.44),
- otftotfm/otftotfm.cc (1.55): to version 0.51bis (the bis is a
- teensy configure.in problemlet): fix crashes with small
- encodings, add --boundary-char and --kpathsea-debug
-
-2003-08-04 Monday 13:26 kohler
-
- * otftotfm/: metrics.cc (1.7), metrics.hh (1.4): fix ExPontoPro
- issue: LIG_LIVE was inappropriate, and when you detect characters
- used in context-only ligatures, you need to redetermine
- reachability
-
-2003-08-04 Monday 12:53 kohler
-
- * otftotfm/otftotfm.1 (1.43), showings/.cvsignore (1.1): manpage
- nits
-
-2003-08-04 Monday 12:50 kohler
-
- * glyphlist.txt (1.7): slight glyphlist modification: prefer Delta
- and Omega to Deltagreek and Omegagreek
-
-2003-08-04 Monday 12:47 kohler
-
- * NEWS (1.31): update NEWS
-
-2003-08-04 Monday 12:42 kohler
-
- * showings/: Makefile (1.1), MinionPro-It-features.tex (1.1),
- MinionPro-Regular-features.tex (1.1), WarnockPro-It-features.tex
- (1.1), WarnockPro-Regular-features.tex (1.1), features.tex (1.1):
- add showings directory
-
-2003-08-04 Monday 12:42 kohler
-
- * otftotfm/metrics.cc (1.6): better ChangedContext structure fixes
- "1st" problem; previously, the ssuperior character introduced by
- 1 s t => 1 ssuperior t was new, so changed context refused to
- implement the 1 ssuperior t => 1 ssuperior tsuperior ligature
-
-2003-08-03 Sunday 22:29 kohler
-
- * NEWS (1.30), README (1.20), configure.in (1.45),
- cfftot1/cfftot1.1 (1.20), otftotfm/metrics.cc (1.5),
- otftotfm/metrics.hh (1.3), otftotfm/otftotfm.1 (1.42),
- otftotfm/otftotfm.cc (1.54): bump version; add lookup number
- check to Metrics: prefer that to storing
-
-2003-08-02 Saturday 22:34 kohler
-
- * otftotfm/metrics.cc (1.4): nit
-
-2003-08-02 Saturday 22:29 kohler
-
- * otftotfm/metrics.cc (1.3): be more careful about accepting
- Substitutions
-
-2003-08-02 Saturday 22:17 kohler
-
- * otftotfm/: gsubencoding.cc (1.26), gsubencoding.hh (1.24),
- metrics.cc (1.2), metrics.hh (1.2), otftotfm.cc (1.53): new
- Metrics plan in place can handle -fordn properly, and can stuff
- "base-only" characters on top of "virtual-only" characters to
- save encoding space
-
-2003-08-01 Friday 18:50 kohler
-
- * otftotfm/: Makefile.am (1.17), dvipsencoding.cc (1.24),
- dvipsencoding.hh (1.17), gsubencoding.cc (1.25), gsubencoding.hh
- (1.23), metrics.cc (1.1), metrics.hh (1.1), otftotfm.cc (1.52),
- secondary.cc (1.4), secondary.hh (1.4): new Metrics plan (not
- GsubEncoding); mostly for code cleanup
-
-2003-07-31 Thursday 16:07 kohler
-
- * otftotfm/: dvipsencoding.cc (1.23), gsubencoding.cc (1.24),
- gsubencoding.hh (1.22), otftotfm.cc (1.51): new story for context
- ligatures focuses on fake characters; perhaps easier to add
- complex context ligatures like -ffrac. Sufficiently tested?
-
-2003-07-30 Wednesday 20:18 kohler
-
- * NEWS (1.29), otftotfm/otftotfm.cc (1.50): nits
-
-2003-07-30 Wednesday 19:42 kohler
-
- * t1lint/: cscheck.cc (1.9), cscheck.hh (1.6), t1lint.cc (1.9):
- adapt to efont changes
-
-2003-07-30 Wednesday 19:33 kohler
-
- * mmafm/mmafm.1 (1.34): bump version number
-
-2003-07-30 Wednesday 19:33 kohler
-
- * mmpfb/: main.cc (1.37), mmpfb.1 (1.35): make --minimize the
- default; and when --minimize is on, force some values to integers
-
-2003-07-30 Wednesday 19:33 kohler
-
- * mmpfb/: myfont.cc (1.37), myfont.hh (1.13): add ability to round
- values to integers
-
-2003-07-30 Wednesday 19:32 kohler
-
- * mmpfb/t1minimize.cc (1.2): include font header comments even in
- minimized fonts
-
-2003-07-30 Wednesday 16:49 kohler
-
- * mmpfb/t1rewrit.cc (1.35): remove debugging
-
-2003-07-30 Wednesday 15:30 kohler
-
- * mmpfb/t1rewrit.cc (1.34): debugging
-
-2003-07-30 Wednesday 15:20 kohler
-
- * mmpfb/t1rewrit.cc (1.33): debugging
-
-2003-07-30 Wednesday 15:03 kohler
-
- * mmpfb/t1rewrit.cc (1.32): debugging
-
-2003-07-30 Wednesday 14:29 kohler
-
- * mmafm/main.cc (1.32), mmpfb/main.cc (1.36), mmpfb/myfont.cc
- (1.36), mmpfb/myfont.hh (1.12), mmpfb/t1rewrit.cc (1.31),
- mmpfb/t1rewrit.hh (1.16): adapt to libefont changes
-
-2003-07-30 Wednesday 11:57 kohler
-
- * configure.in (1.44): HAVE_ADDRESSABLE_VA_LIST configury
-
-2003-07-24 Thursday 12:17 kohler
-
- * mmpfb/: t1rewrit.cc (1.30), t1rewrit.hh (1.15): use the global
- Type1CharstringGen
-
-2003-07-15 Tuesday 06:43 kohler
-
- * NEWS (1.28), README (1.19), configure.in (1.43), glyphlist.txt
- (1.6), cfftot1/cfftot1.1 (1.19), otftotfm/dvipsencoding.cc
- (1.22), otftotfm/gsubencoding.cc (1.23), otftotfm/gsubencoding.hh
- (1.21), otftotfm/otftotfm.1 (1.41), otftotfm/secondary.cc (1.3),
- otftotfm/secondary.hh (1.3): support "emptyslot"
-
-2003-07-09 Wednesday 14:55 kohler
-
- * NEWS (1.27): newslet
-
-2003-07-09 Wednesday 13:56 kohler
-
- * glyphlist.txt (1.5), otftotfm/otftotfm.1 (1.40),
- otftotfm/secondary.cc (1.2), otftotfm/secondary.hh (1.2): use
- correct Unicode code points for cwm (zwnj) and visualspace; and
- document synthetic characters in the man page
-
-2003-07-09 Wednesday 12:41 kohler
-
- * configure.in (1.42): to 0.18: configury for whether va_list is
- addressable
-
-2003-07-09 Wednesday 12:37 kohler
-
- * mmafm/mmafm.1 (1.33), mmpfb/mmpfb.1 (1.34): to 1.23: check
- whether va_list is addressable
-
-2003-07-09 Wednesday 11:03 kohler
-
- * NEWS (1.26), README (1.18), configure.in (1.41),
- cfftot1/cfftot1.1 (1.18), otftotfm/otftotfm.1 (1.39): to 0.18
-
-2003-07-09 Wednesday 10:31 kohler
-
- * otftotfm/otftotfm.cc (1.49): new CharstringBounds interface; and
- RULE marks the boundser
-
-2003-07-09 Wednesday 10:09 kohler
-
- * otftotfm/otftotfm.cc (1.48): avoid memory leak (why not)
-
-2003-07-09 Wednesday 10:07 kohler
-
- * NEWS (1.25), otftotfm/Makefile.am (1.16),
- otftotfm/gsubencoding.cc (1.22), otftotfm/gsubencoding.hh (1.20),
- otftotfm/otftotfm.cc (1.47), otftotfm/secondary.cc (1.1),
- otftotfm/secondary.hh (1.1): GsubEncoding supports fake ligatures
- and other faked characters
-
-2003-07-09 Wednesday 10:02 kohler
-
- * otftotfm/: dvipsencoding.cc (1.21), dvipsencoding.hh (1.16):
- store unicodes() for easy access, and make_gsub_encoding() can
- call a Secondary for missing glyphs
-
-2003-07-09 Wednesday 10:01 kohler
-
- * glyphlist.txt (1.4): add cwm, visualspace, and Germandbls
-
-2003-07-08 Tuesday 15:34 kohler
-
- * configure.in (1.40): configury nitlets
-
-2003-07-08 Tuesday 15:25 kohler
-
- * acconfig.h (1.9), configure.in (1.39): move to autoconf-2.57
- whole hog
-
-2003-07-08 Tuesday 14:50 kohler
-
- * configure.in (1.38): <sys/types.h>
-
-2003-07-08 Tuesday 14:48 kohler
-
- * configure.in (1.37): add check for byteorder.h (Mingw32?)
-
-2003-07-07 Monday 12:50 kohler
-
- * otftotfm/otftotfm.cc (1.46): try to print reals so fontinst wont
- choke
-
-2003-07-07 Monday 12:50 kohler
-
- * glyphlist.txt (1.3): encode new dotlessj
-
-2003-07-07 Monday 09:31 kohler
-
- * otftotfm/dvipsencoding.hh (1.15): support new-style
- glyphlist.txt, which lists multiple possibilities for a glyph,
- and allow nonspaced semicolons in LIGKERN/UNICODING, and fix
- infinite loop reported by Marco
-
-2003-07-07 Monday 09:31 kohler
-
- * otftotfm/dvipsencoding.cc (1.20): support new-style
- glyphlist.txt, which lists multiple possibilities for a glyph,
- and allow nonspaced semicolons in LIGKERN/UNICODING
-
-2003-07-07 Monday 09:30 kohler
-
- * glyphlist.txt (1.2), texmathunicoding.txt (1.2): fold
- texmathunicoding.txt (and Ng/ng encodings) into glyphlist.txt
-
-2003-07-06 Sunday 20:02 kohler
-
- * NEWS (1.24), README (1.17), configure.in (1.36),
- cfftot1/cfftot1.1 (1.17), otftotfm/dvipsencoding.cc (1.19),
- otftotfm/dvipsencoding.hh (1.14), otftotfm/gsubencoding.cc
- (1.21), otftotfm/gsubencoding.hh (1.19), otftotfm/otftotfm.1
- (1.38), otftotfm/otftotfm.cc (1.45): to 0.17: improve heuristics,
- remove LIGKERN-killed ligatures from encoding
-
-2003-07-06 Sunday 16:25 kohler
-
- * otftotfm/otftotfm.1 (1.37): nit
-
-2003-07-06 Sunday 16:20 kohler
-
- * NEWS (1.23): to version 0.16
-
-2003-07-06 Sunday 14:37 kohler
-
- * NEWS (1.22), texmathunicoding.txt (1.1): add texmathunicoding.txt
-
-2003-07-06 Sunday 11:11 kohler
-
- * NEWS (1.20), otftotfm/dvipsencoding.cc (1.18),
- otftotfm/dvipsencoding.hh (1.13), otftotfm/otftotfm.1 (1.36),
- otftotfm/otftotfm.cc (1.44), NEWS (1.21): support --codingscheme
- option; check for too-long and parenthesis-containing; document;
- add --unicoding
-
-2003-07-06 Sunday 00:09 kohler
-
- * otftotfm/: dvipsencoding.cc (1.17), dvipsencoding.hh (1.12),
- gsubencoding.hh (1.18), otftotfm.cc (1.43): % CODINGSCHEME
- support, and use different design units to be friendlier to
- fontinst (Marco Kuhlmann)
-
-2003-07-05 Saturday 14:10 kohler
-
- * NEWS (1.19), otftotfm/automatic.cc (1.13), otftotfm/otftotfm.1
- (1.35): store dvips files in TEXMF/dvips/VENDOR
-
-2003-07-05 Saturday 13:54 kohler
-
- * otftotfm/: dvipsencoding.cc (1.16), dvipsencoding.hh (1.11),
- gsubencoding.cc (1.20), gsubencoding.hh (1.17), otftotfm.cc
- (1.42): remove O(n^2) algorithms, and sort ligatures by a
- preference score, so we include only the "best" ones when there
- isnt encoding space for all
-
-2003-07-04 Friday 14:28 kohler
-
- * NEWS (1.18), README (1.16), configure.in (1.35),
- cfftot1/cfftot1.1 (1.16), otftotfm/dvipsencoding.cc (1.15),
- otftotfm/dvipsencoding.hh (1.10), otftotfm/otftotfm.1 (1.34),
- otftotfm/otftotfm.cc (1.41): add --ligkern option, and
- --automatic removes old .vf files
-
-2003-07-04 Friday 13:24 kohler
-
- * cfftot1/cfftot1.1 (1.15): make things clear
-
-2003-07-04 Friday 00:01 kohler
-
- * otftotfm/otftotfm.1 (1.33): nit
-
-2003-07-03 Thursday 23:59 kohler
-
- * otftotfm/otftotfm.1 (1.32): man page additions
-
-2003-07-03 Thursday 23:47 kohler
-
- * NEWS (1.17), README (1.15), configure.in (1.34),
- cfftot1/cfftot1.1 (1.14), otftotfm/otftotfm.1 (1.31): version
- update
-
-2003-07-03 Thursday 23:47 kohler
-
- * otftotfm/otftotfm.cc (1.40): clear out vectors of Substitutions
- and Positionings to avoid re-application
-
-2003-07-03 Thursday 14:31 kohler
-
- * otftotfm/: Makefile.am (1.15), gsubencoding.cc (1.19),
- gsubencoding.hh (1.16), otftotfm.cc (1.39): work towards ExPonto
- -fcalt
-
-2003-07-02 Wednesday 16:25 kohler
-
- * otftotfm/gsubencoding.cc (1.18): remove useless static function
-
-2003-07-02 Wednesday 16:21 kohler
-
- * NEWS (1.16), README (1.14), configure.in (1.33),
- cfftot1/cfftot1.1 (1.13), otftotfm/otftotfm.1 (1.30): versionize
-
-2003-07-02 Wednesday 16:14 kohler
-
- * otftotfm/: otftotfm.1 (1.29), otftotfm.cc (1.38): remove virtual
- font from psfonts.map, and add --letterspacing option
-
-2003-07-02 Wednesday 16:13 kohler
-
- * otftotfm/: gsubencoding.cc (1.17), gsubencoding.hh (1.15):
- chained positionings support letterspacing
-
-2003-07-02 Wednesday 16:13 kohler
-
- * otftotfm/automatic.cc (1.12): support removing a font from the
- psfonts.map (useful for virtual fonts)
-
-2003-06-29 Sunday 17:48 kohler
-
- * NEWS (1.15), configure.in (1.32), otftotfm/automatic.cc (1.11),
- otftotfm/dvipsencoding.cc (1.14), otftotfm/dvipsencoding.hh
- (1.9), otftotfm/gsubencoding.cc (1.16), otftotfm/gsubencoding.hh
- (1.14), otftotfm/otftotfm.cc (1.37): hypothetically support left
- context
-
-2003-06-27 Friday 09:54 kohler
-
- * Makefile.am (1.15), NEWS (1.14), README (1.13), configure.in
- (1.31), cfftot1/cfftot1.1 (1.12), otftotfm/otftotfm.1 (1.28):
- versionize
-
-2003-06-27 Friday 09:38 kohler
-
- * otftotfm/automatic.cc (1.10): error buglets reported by Bruce
- DArcus: dont search for a writable texdir more than once; vendor
- is never null string; error messages are a bit more verbose
-
-2003-06-26 Thursday 14:51 kohler
-
- * otftotfm/: otftotfm.1 (1.26), otftotfm.1 (1.27): more manual nits
-
-2003-06-26 Thursday 14:39 kohler
-
- * 7t.enc (1.1), Makefile.am (1.14), otftotfm/dvipsencoding.cc
- (1.13), otftotfm/gsubencoding.cc (1.15), otftotfm/otftotfm.1
- (1.25): diagnostics work
-
-2003-06-26 Thursday 12:56 kohler
-
- * otftotfm/otftotfm.1 (1.24): nit
-
-2003-06-26 Thursday 12:54 kohler
-
- * otftotfm/otftotfm.1 (1.23): more links in feature section
-
-2003-06-26 Thursday 12:50 kohler
-
- * otftotfm/otftotfm.1 (1.22): spello
-
-2003-06-26 Thursday 12:47 kohler
-
- * NEWS (1.13), README (1.12), configure.in (1.30),
- cfftot1/cfftot1.1 (1.11), otftotfm/otftotfm.1 (1.21): to release
- 0.11
-
-2003-06-26 Thursday 12:30 kohler
-
- * otftotfm/: gsubencoding.cc (1.14), gsubencoding.hh (1.13),
- otftotfm.1 (1.20), otftotfm.cc (1.36): support -ffina
-
-2003-06-26 Thursday 12:14 kohler
-
- * otftotfm/: automatic.cc (1.9), dvipsencoding.cc (1.12),
- gsubencoding.cc (1.13), gsubencoding.hh (1.12), otftotfm.1
- (1.19), otftotfm.cc (1.35): support right-context single
- substitution (-fcswh)
-
-2003-06-26 Thursday 01:20 kohler
-
- * NEWS (1.12), README (1.11), configure.in (1.29),
- cfftot1/cfftot1.1 (1.10): note buglet: update -ls-R for
- encodings
-
-2003-06-26 Thursday 01:20 kohler
-
- * otftotfm/: otftotfm.1 (1.18), otftotfm.cc (1.34): update manual,
- and update ls-R for new encodings
-
-2003-06-25 Wednesday 16:56 kohler
-
- * NEWS (1.11), README (1.10), configure.in (1.28),
- cfftot1/cfftot1.1 (1.9), otftotfm/otftotfm.1 (1.17): prepare for
- 0.9 distribution
-
-2003-06-24 Tuesday 23:01 kohler
-
- * otftotfm/: automatic.cc (1.8), otftotfm.cc (1.33), util.cc (1.9),
- util.hh (1.6): always remove directory components from names in
- the mapfile; requested by Norbert
-
-2003-06-24 Tuesday 15:29 kohler
-
- * COPYING (1.1), README (1.9), cfftot1/cfftot1.cc (1.16),
- cfftot1/maket1font.cc (1.14), otftotfm/automatic.cc (1.7),
- otftotfm/dvipsencoding.cc (1.11), otftotfm/gsubencoding.cc
- (1.12), otftotfm/kpseinterface.c (1.3), otftotfm/otftotfm.cc
- (1.32), otftotfm/util.cc (1.8), t1lint/cscheck.cc (1.8),
- t1lint/t1lint.cc (1.8), t1testpage/t1testpage.cc (1.8): add
- explicit GPL to files
-
-2003-06-24 Tuesday 14:00 kohler
-
- * otftotfm/otftotfm.cc (1.31): nit
-
-2003-06-24 Tuesday 12:30 kohler
-
- * configure.in (1.27), otftotfm/Makefile.am (1.14): fix configury
- problems reported by Norbert Preining and Bruce D'Arcus
-
-2003-06-24 Tuesday 12:30 kohler
-
- * otftotfm/kpseinterface.c (1.2): #include <kpathsea/config.h> to
- get necessary symbols
-
-2003-06-23 Monday 19:44 kohler
-
- * otftotfm/: automatic.cc (1.6), otftotfm.cc (1.30): more error
- messages (missing encoding is a fatal error; warn on no writable
- $TEXMF), and do not create ls-R
-
-2003-06-23 Monday 18:41 kohler
-
- * otftotfm/otftotfm.1 (1.16): whoops, manpagelet
-
-2003-06-23 Monday 18:35 kohler
-
- * NEWS (1.10), README (1.8), configure.in (1.26), cfftot1/cfftot1.1
- (1.8), otftotfm/otftotfm.1 (1.15): update version to 0.8
-
-2003-06-23 Monday 18:13 kohler
-
- * NEWS (1.9), otftotfm/otftotfm.1 (1.14): more manual nits
-
-2003-06-23 Monday 17:47 kohler
-
- * otftotfm/: automatic.cc (1.5), automatic.hh (1.4), otftotfm.1
- (1.13), otftotfm.cc (1.29): manual fixes
-
-2003-06-23 Monday 14:15 kohler
-
- * Makefile.am (1.13), configure.in (1.25), otftotfm/Makefile.am
- (1.13): remove old directory
-
-2003-06-23 Monday 02:20 kohler
-
- * configure.in (1.24), otftotfm/Makefile.am (1.12),
- otftotfm/automatic.cc (1.4), otftotfm/automatic.hh (1.3),
- otftotfm/kpseinterface.c (1.1), otftotfm/kpseinterface.h (1.1),
- otftotfm/otftotfm.cc (1.28), otftotfm/util.cc (1.7),
- otftotfm/util.hh (1.5): use C kpathsearch interface, for speed;
- add --no-create and --verbose options; some nits in how -a files
- are named
-
-2003-06-20 Friday 19:51 kohler
-
- * otftotfm/: automatic.cc (1.3), gsubencoding.cc (1.11),
- gsubencoding.hh (1.11): default vendor is "lcdftools", not
- "otftotfm"; make everything faster (profiling identified
- GsubEncoding::encoding() as a bottleneck)
-
-2003-06-20 Friday 15:40 kohler
-
- * otftotfm/: automatic.cc (1.2), automatic.hh (1.2), otftotfm.cc
- (1.27), util.cc (1.6), util.hh (1.4): add support for --vendor,
- and search for encodings with kpathsea
-
-2003-06-19 Thursday 23:25 kohler
-
- * acconfig.h (1.8), configure.in (1.23), otftotfm/.cvsignore (1.3),
- otftotfm/Makefile.am (1.11), otftotfm/automatic.cc (1.1),
- otftotfm/automatic.hh (1.1), otftotfm/otftotfm.1 (1.12),
- otftotfm/otftotfm.cc (1.26), otftotfm/util.cc (1.5),
- otftotfm/util.hh (1.3): otftopl --automatic works with web2c
-
-2003-06-18 Wednesday 20:10 kohler
-
- * otftotfm/: dvipsencoding.cc (1.10), dvipsencoding.hh (1.8),
- gsubencoding.cc (1.10), gsubencoding.hh (1.10), otftotfm.cc
- (1.25): otftopl: moving towards new, more automatic story, and
- support -f cpsp-like glyph positionings
-
-2003-06-16 Monday 21:15 kohler
-
- * otftotfm/: gsubencoding.cc (1.9), gsubencoding.hh (1.9),
- otftotfm.cc (1.24): warn when a feature cannot be represented
-
-2003-06-13 Friday 16:10 kohler
-
- * Makefile.am (1.12), cfftot1/cfftot1.1 (1.7), otftotfm/otftotfm.1
- (1.11): fix make versionize
-
-2003-06-13 Friday 16:09 kohler
-
- * NEWS (1.8), README (1.7), configure.in (1.22): to version 0.7
-
-2003-06-13 Friday 16:08 kohler
-
- * cfftot1/maket1font.cc (1.13): fix crash on MinionPro-It: remember
- that a glyph can call a subroutine multiple times
-
-2003-06-13 Friday 16:08 kohler
-
- * otftotfm/: gsubencoding.cc (1.8), gsubencoding.hh (1.8),
- otftotfm.cc (1.23): include better error messages when shrinking
- an encoding (was in 0.6, but not checked in)
-
-2003-06-12 Thursday 10:18 kohler
-
- * NEWS (1.7), README (1.6), configure.in (1.21),
- otftotfm/dvipsencoding.cc (1.9), otftotfm/dvipsencoding.hh (1.7):
- better warnings in dvipsencoding
-
-2003-06-11 Wednesday 22:24 kohler
-
- * otftotfm/dvipsencoding.cc (1.8): exit from DvipsEncoding::parse()
- if you can't read the file
-
-2003-06-11 Wednesday 22:24 kohler
-
- * t1lint/t1lint.cc (1.7): process stdin if no filename supplied
-
-2003-06-11 Wednesday 22:24 kohler
-
- * otftotfm/: otftotfm.1 (1.10), otftotfm.cc (1.22): replace
- --print-scripts with --query-scripts, add --qs and --qf, and use
- new GsubLookup::unparse_automatics() interface
-
-2003-06-11 Wednesday 22:23 kohler
-
- * cfftot1/: cfftot1.cc (1.15), maket1font.hh (1.4): remove "good
- flex" noise, and make "bad flex" more informative; report errors
- to an ErrorHandler
-
-2003-06-11 Wednesday 22:23 kohler
-
- * cfftot1/maket1font.cc (1.12): remove "good flex" noise, and make
- "bad flex" more informative; report errors to an ErrorHandler;
- fix bad definitions for Subrs 1 and 2
-
-2003-06-05 Thursday 19:22 kohler
-
- * mmafm/main.cc (1.31), mmpfb/main.cc (1.35): support -v as a
- synonym for --version
-
-2003-06-05 Thursday 19:19 kohler
-
- * NEWS (1.6), README (1.5), configure.in (1.20),
- cfftot1/Makefile.am (1.9), cfftot1/cfftot1.1 (1.6),
- cfftot1/cfftot1.cc (1.14), cfftot1/templatei.cc (1.4),
- otftotfm/Makefile.am (1.10), otftotfm/otftotfm.1 (1.9),
- otftotfm/otftotfm.cc (1.21), otftotfm/templatei.cc (1.5),
- t1lint/Makefile.am (1.9), t1lint/templatei.cc (1.3),
- t1testpage/Makefile.am (1.4), t1testpage/templatei.cc (1.3):
- template reorganization for gcc-3.3
-
-2003-06-05 Thursday 19:14 kohler
-
- * mmafm/Makefile.am (1.11), mmafm/mmafm.1 (1.32),
- mmafm/templatei.cc (1.3), mmpfb/Makefile.am (1.12), mmpfb/mmpfb.1
- (1.33), mmpfb/myfont.cc (1.35), mmpfb/templatei.cc (1.2): more
- template nonsense
-
-2003-06-03 Tuesday 18:48 kohler
-
- * otftotfm/otftotfm.cc (1.20): oops: calculate shear correctly
-
-2003-06-03 Tuesday 18:41 kohler
-
- * NEWS (1.5), README (1.4), configure.in (1.19),
- otftotfm/otftotfm.1 (1.8), otftotfm/otftotfm.cc (1.19): to 0.4:
- add --extend and --slant
-
-2003-06-03 Tuesday 17:22 kohler
-
- * otftotfm/otftotfm.cc (1.18): shift the command line to after the
- encoding to attempt to please ps2pk (it failed, ps2pk is so lame,
- but it was a start)
-
-2003-06-03 Tuesday 16:45 kohler
-
- * otftotfm/otftotfm.cc (1.17): change AutoEnc_digest to
- AutoEnc-digest to satisfy ps2pk
-
-2003-06-03 Tuesday 13:01 kohler
-
- * Makefile.am (1.11), NEWS (1.4), README (1.3), configure.in
- (1.18), cfftot1/cfftot1.1 (1.5), otftotfm/otftotfm.1 (1.7): new
- version
-
-2003-06-03 Tuesday 13:01 kohler
-
- * t1testpage/t1testpage.cc (1.7): nit
-
-2003-06-03 Tuesday 13:00 kohler
-
- * cfftot1/maket1font.cc (1.11): don't include FontInfo dict if
- theres no FontInfo, and account for the extra elements of the
- Private dict with add_dict_size()
-
-2003-06-03 Tuesday 12:56 kohler
-
- * mmpfb/: main.cc (1.34), myfont.cc (1.34), t1rewrit.cc (1.29):
- quit early on invalid font, and adapt to libefont changes
-
-2003-06-03 Tuesday 12:56 kohler
-
- * mmafm/mmafm.1 (1.31), mmpfb/mmpfb.1 (1.32): use .M for manpage
- links
-
-2003-06-03 Tuesday 09:16 kohler
-
- * otftotfm/util.cc (1.4): MS/DOS _setmode() to binary when
- appropriate
-
-2003-06-03 Tuesday 09:16 kohler
-
- * cfftot1/cfftot1.cc (1.13): MS/DOS _setmode() to binary when
- appropriate; and bag when the CFF contains errors (VVV)
-
-2003-06-03 Tuesday 09:16 kohler
-
- * NEWS (1.3), configure.in (1.17), cfftot1/cfftot1.1 (1.4),
- otftotfm/otftotfm.1 (1.6): update to version 0.2: fix Vladimir
- Volovich's bugs
-
-2003-06-03 Tuesday 08:15 kohler
-
- * configure.in (1.16): ntoh[sl] configury
-
-2003-06-02 Monday 22:22 kohler
-
- * otftotfm/: dvipsencoding.cc (1.7), dvipsencoding.hh (1.6),
- gsubencoding.cc (1.7), gsubencoding.hh (1.7), otftotfm.1 (1.5),
- otftotfm.cc (1.16): support {L} {K} {LK} {KL} LIGKERN commands;
- document them; and don't output duplicate kerns
-
-2003-06-02 Monday 21:22 kohler
-
- * README (1.2), cfftot1/Makefile.am (1.8), cfftot1/cfftot1.1 (1.3),
- otftotfm/Makefile.am (1.9), otftotfm/otftotfm.1 (1.4): include
- manual pages in distribution; manual pages contain links as .M;
- fix README
-
-2003-06-02 Monday 18:00 kohler
-
- * cfftot1/Makefile.am (1.7): duh
-
-2003-06-02 Monday 17:53 kohler
-
- * Makefile.am (1.10), configure.in (1.15), cfftot1/cfftot1.1 (1.2),
- otftotfm/dvipsencoding.cc (1.6), otftotfm/otftotfm.1 (1.3),
- otftotfm/otftotfm.cc (1.15): nits and behavior changesw
-
-2003-06-01 Sunday 11:45 kohler
-
- * configure.in (1.14), cfftot1/Makefile.am (1.6),
- otftotfm/Makefile.am (1.8), otftotfm/otftotfm.1 (1.2),
- otftotfm/otftotfm.cc (1.14), otftotfm/util.hh (1.2): add --tfm
- option
-
-2003-06-01 Sunday 09:20 kohler
-
- * mmafm/main.cc (1.30), mmpfb/main.cc (1.32), mmpfb/main.cc (1.33):
- adapt to ErrorHandler changes
-
-2003-05-31 Saturday 23:29 kohler
-
- * Makefile.am (1.9), NEWS (1.2), cfftot1/Makefile.am (1.5),
- cfftot1/cfftot1.1 (1.1), cfftot1/cfftot1.cc (1.12),
- otftotfm/Makefile.am (1.7), otftotfm/otftotfm.1 (1.1),
- t1lint/Makefile.am (1.8): manual pages
-
-2003-05-31 Saturday 17:29 kohler
-
- * configure.in (1.13), cfftot1/cfftot1.cc (1.11),
- otftotfm/otftotfm.cc (1.12), otftotfm/util.cc (1.3),
- t1lint/t1lint.cc (1.6), t1testpage/t1testpage.cc (1.6),
- otftotfm/otftotfm.cc (1.13): support --print-features,
- --print-scripts, etc
-
-2003-05-30 Friday 17:24 kohler
-
- * Makefile.am (1.8), configure.in (1.12), cfftot1/maket1font.cc
- (1.10), otftotfm/.cvsignore (1.2), otftotfm/Makefile.am (1.6),
- otftotfm/otftotfm.cc (1.11): rename to otftopl; cfftot1 adapts to
- Type1Interp changes
-
-2003-05-30 Friday 16:22 kohler
-
- * cfftot1/cfftot1.cc (1.10), t1lint/t1lint.cc (1.5),
- t1testpage/t1testpage.cc (1.5): ErrorHandler adaptation continued
-
-2003-05-30 Friday 16:21 kohler
-
- * otftotfm/: Makefile.am (1.5), dvipsencoding.cc (1.5),
- dvipsencoding.hh (1.5), gsubencoding.cc (1.6), gsubencoding.hh
- (1.6), md5.c (1.1), md5.h (1.1), otftotfm.cc (1.10): creeping
- toward usability
-
-2003-05-29 Thursday 23:24 kohler
-
- * cfftot1/cfftot1.cc (1.9), otftotfm/dvipsencoding.cc (1.4),
- otftotfm/dvipsencoding.hh (1.4), otftotfm/gsubencoding.cc (1.5),
- otftotfm/gsubencoding.hh (1.5), otftotfm/otftotfm.cc (1.9),
- otftotfm/util.cc (1.2), t1lint/t1lint.cc (1.4),
- t1testpage/t1testpage.cc (1.4): adapt to ErrorHandler changes,
- and apply LIGKERN statements to the output
-
-2003-05-29 Thursday 15:23 kohler
-
- * cfftot1/cfftot1.cc (1.8), cfftot1/maket1font.cc (1.9),
- cfftot1/maket1font.hh (1.3), otftotfm/dvipsencoding.cc (1.3),
- otftotfm/dvipsencoding.hh (1.3), otftotfm/gsubencoding.cc (1.4),
- otftotfm/gsubencoding.hh (1.4), otftotfm/otftotfm.cc (1.8):
- adapt, and move towards a correct otftoafm
-
-2003-05-28 Wednesday 23:03 kohler
-
- * libefont/Makefile.am (1.8), otftotfm/gsubencoding.cc (1.3),
- otftotfm/gsubencoding.hh (1.3), otftotfm/otftotfm.cc (1.7): parse
- GPOS
-
-2003-05-27 Tuesday 23:28 kohler
-
- * Makefile.am (1.7), acconfig.h (1.7), configure.in (1.11),
- glyphlist.txt (1.1), otftotfm/Makefile.am (1.4),
- otftotfm/dvipsencoding.cc (1.2), otftotfm/dvipsencoding.hh (1.2),
- otftotfm/gsubencoding.cc (1.2), otftotfm/gsubencoding.hh (1.2),
- otftotfm/otftotfm.cc (1.6), otftotfm/util.cc (1.1),
- otftotfm/util.hh (1.1): generate simple VPLs
-
-2003-05-25 Sunday 18:09 kohler
-
- * otftotfm/: Makefile.am (1.3), dvipsencoding.cc (1.1),
- dvipsencoding.hh (1.1), templatei.cc (1.4): moving towards DVIPS
- encoding parsing
-
-2003-05-25 Sunday 02:18 kohler
-
- * cfftot1/cfftot1.cc (1.7), libefont/Makefile.am (1.7),
- otftotfm/Makefile.am (1.2), otftotfm/gsubencoding.cc (1.1),
- otftotfm/gsubencoding.hh (1.1), otftotfm/otftotfm.cc (1.5),
- otftotfm/templatei.cc (1.3): first version with GSUB support
-
-2003-05-23 Friday 12:52 kohler
-
- * libefont/Makefile.am (1.6): otfdescrip
-
-2003-05-22 Thursday 19:06 kohler
-
- * libefont/Makefile.am (1.5), otftotfm/otftotfm.cc (1.4): use new
- GSUB format
-
-2003-02-10 Monday 16:34 kohler
-
- * mmafm/mmafm.1 (1.30), mmpfb/mmpfb.1 (1.31): mminstance.spec, not
- rpm.spec; and check that "make versionize" has been done
-
-2003-01-27 Monday 10:46 kohler
-
- * acconfig.h (1.6), cfftot1/maket1font.cc (1.8), t1lint/cscheck.cc
- (1.7): nit
-
-2003-01-05 Sunday 14:36 kohler
-
- * mmpfb/main.cc (1.31): add --help entry for --minimize
-
-2003-01-05 Sunday 14:25 kohler
-
- * mmafm/main.cc (1.29), mmafm/mmafm.1 (1.29), mmpfb/mmpfb.1 (1.30):
- nitlets
-
-2003-01-05 Sunday 14:24 kohler
-
- * mmafm/templatei.cc (1.2): remove useless instantiation
-
-2003-01-05 Sunday 14:24 kohler
-
- * mmpfb/: t1rewrit.cc (1.28), t1rewrit.hh (1.14): add subroutine
- renumbering
-
-2003-01-05 Sunday 14:23 kohler
-
- * mmpfb/: myfont.cc (1.33), myfont.hh (1.11): interpolate FullName
- as well as FontName; uncache FontName definition after
- interpolation
-
-2003-01-05 Sunday 14:23 kohler
-
- * mmpfb/: main.cc (1.30), t1minimize.cc (1.1), t1minimize.hh (1.1),
- Makefile.am (1.11): add --minimize option; also, fill in Subrs
- array
-
-2003-01-05 Sunday 09:30 kohler
-
- * mmafm/Makefile.am (1.10), mmafm/hashmapi.cc (1.7), mmafm/mmafm.1
- (1.28), mmafm/templatei.cc (1.1), mmafm/vectori.cc (1.9),
- mmpfb/Makefile.am (1.10), mmpfb/hashmapi.cc (1.7), mmpfb/mmpfb.1
- (1.29), mmpfb/templatei.cc (1.1), mmpfb/vectori.cc (1.8):
- mminstance compiles again
-
-2003-01-02 Thursday 12:12 kohler
-
- * cfftot1/cfftot1.cc (1.6), libefont/Makefile.am (1.4),
- otftotfm/otftotfm.cc (1.3), otftotfm/templatei.cc (1.2): adapt to
- changes
-
-2002-12-31 Tuesday 15:20 kohler
-
- * otftotfm/otftotfm.cc (1.2): nitlet
-
-2002-12-31 Tuesday 13:48 kohler
-
- * Makefile.am (1.6), configure.in (1.10), cfftot1/cfftot1.cc (1.5),
- libefont/Makefile.am (1.3), liblcdf/Makefile.am (1.3),
- otftotfm/.cvsignore (1.1), otftotfm/Makefile.am (1.1),
- otftotfm/otftotfm.cc (1.1), otftotfm/templatei.cc (1.1): updates,
- and add otftoafm
-
-2002-12-30 Monday 15:38 kohler
-
- * cfftot1/Makefile.am (1.4), cfftot1/maket1font.cc (1.7),
- cfftot1/point.cc (1.2), cfftot1/point.hh (1.2),
- cfftot1/transform.cc (1.2), cfftot1/transform.hh (1.2),
- liblcdf/Makefile.am (1.2), t1lint/Makefile.am (1.7),
- t1lint/cscheck.cc (1.6), t1lint/cscheck.hh (1.5), t1lint/point.cc
- (1.2), t1lint/point.hh (1.3): Point moved to liblcdf
-
-2002-12-30 Monday 13:36 kohler
-
- * .cvsignore (1.3): nitlet
-
-2002-12-30 Monday 13:33 kohler
-
- * .cvsignore (1.2), Makefile.am (1.5), configure.in (1.9),
- cfftot1/Makefile.am (1.3), cfftot1/cfftot1.cc (1.4),
- cfftot1/maket1font.cc (1.6), cfftot1/maket1font.hh (1.2),
- cfftot1/templatei.cc (1.3), libefont/Makefile.am (1.2),
- liblcdf/.cvsignore (1.1), liblcdf/Makefile.am (1.1),
- t1lint/Makefile.am (1.6), t1lint/cscheck.cc (1.5),
- t1lint/cscheck.hh (1.4), t1lint/t1lint.cc (1.3),
- t1lint/templatei.cc (1.2), t1testpage/Makefile.am (1.3),
- t1testpage/t1testpage.cc (1.3), t1testpage/templatei.cc (1.2):
- adapt to new source file organization
-
-2002-12-30 Monday 10:14 kohler
-
- * mmafm/Makefile.am (1.9), mmpfb/Makefile.am (1.9): further
- adaptation
-
-2002-12-30 Monday 10:06 kohler
-
- * mmafm/Makefile.am (1.8), mmafm/hashmapi.cc (1.6), mmafm/main.cc
- (1.28), mmafm/vectori.cc (1.8), mmpfb/Makefile.am (1.8),
- mmpfb/hashmapi.cc (1.6), mmpfb/main.cc (1.29), mmpfb/myfont.cc
- (1.32), mmpfb/t1rewrit.cc (1.27), mmpfb/t1rewrit.hh (1.13),
- mmpfb/vectori.cc (1.7): adapt to libefont and liblcdf
- rearrangement
-
-2002-12-29 Sunday 22:16 kohler
-
- * mmafm/Makefile.am (1.7), mmafm/main.cc (1.27), mmafm/vectori.cc
- (1.7), mmpfb/Makefile.am (1.7), mmpfb/hashmapi.cc (1.5),
- mmpfb/main.cc (1.28), mmpfb/myfont.cc (1.31), mmpfb/myfont.hh
- (1.10), mmpfb/t1rewrit.cc (1.26), mmpfb/t1rewrit.hh (1.12): adapt
- to libefont reorganization
-
-2002-12-12 Thursday 00:30 kohler
-
- * cfftot1/: cfftot1.cc (1.3), maket1font.cc (1.5): cfftot1 produces
- Subrs
-
-2002-12-10 Tuesday 16:00 kohler
-
- * configure.in (1.8): configury fix
-
-2002-12-10 Tuesday 12:13 kohler
-
- * acconfig.h (1.5), configure.in (1.7): new configury for uintXX_t
- types et al
-
-2002-12-10 Tuesday 12:12 kohler
-
- * cfftot1/maket1font.cc (1.4): more updates
-
-2002-12-10 Tuesday 12:05 kohler
-
- * t1lint/cscheck.cc (1.4): use CharstringInterp::error_string()
-
-2002-12-10 Tuesday 10:30 kohler
-
- * cfftot1/: maket1font.cc (1.3), templatei.cc (1.2): moving towards
- subr adaptation
-
-2002-12-09 Monday 12:22 kohler
-
- * configure.in (1.6): add -W as well as -Wall
-
-2002-12-09 Monday 12:22 kohler
-
- * cfftot1/maket1font.cc (1.2): add Flex and hint replacement
- support
-
-2002-12-08 Sunday 00:24 kohler
-
- * cfftot1/Makefile.am (1.2), cfftot1/cfftot1.cc (1.2),
- cfftot1/maket1font.cc (1.1), cfftot1/maket1font.hh (1.1),
- cfftot1/point.cc (1.1), cfftot1/point.hh (1.1),
- cfftot1/transform.cc (1.1), cfftot1/transform.hh (1.1),
- t1lint/point.hh (1.2): first working version of cfftot1!
-
-2002-12-08 Sunday 00:22 kohler
-
- * mmpfb/myfont.cc (1.30): adapt to libefont
-
-2002-12-07 Saturday 00:27 kohler
-
- * Makefile.am (1.4), acconfig.h (1.4), configure.in (1.5),
- cfftot1/.cvsignore (1.1), cfftot1/Makefile.am (1.1),
- cfftot1/cfftot1.cc (1.1), cfftot1/templatei.cc (1.1),
- libefont/.cvsignore (1.1), libefont/Makefile.am (1.1),
- t1lint/.cvsignore (1.3), t1lint/Makefile.am (1.5),
- t1lint/cscheck.cc (1.3), t1lint/cscheck.hh (1.3),
- t1lint/hashmapi.cc (1.2), t1lint/t1lint.cc (1.2),
- t1lint/templatei.cc (1.1), t1lint/vectori.cc (1.2),
- t1testpage/.cvsignore (1.2), t1testpage/Makefile.am (1.2),
- t1testpage/hashmapi.cc (1.2), t1testpage/t1testpage.cc (1.2),
- t1testpage/templatei.cc (1.1), t1testpage/vectori.cc (1.2): name
- cleanup, templatei not vectori
-
-2002-12-07 Saturday 00:16 kohler
-
- * mmpfb/: t1rewrit.cc (1.25), t1rewrit.hh (1.11): more name changes
-
-2002-12-06 Friday 17:32 kohler
-
- * mmafm/.cvsignore (1.3), mmafm/Makefile.am (1.6), mmpfb/.cvsignore
- (1.3), mmpfb/Makefile.am (1.6): move to libefont instead of
- separate t1lib and metricslib
-
-2002-12-04 Wednesday 22:56 kohler
-
- * mmafm/main.cc (1.26), mmpfb/main.cc (1.27), mmpfb/myfont.cc
- (1.29), mmpfb/myfont.hh (1.9), mmpfb/t1rewrit.cc (1.24),
- mmpfb/t1rewrit.hh (1.10): fix bugs with regular Type 1
- charstrings; keep track of, and compensate for, rounding error in
- mmpfb
-
-2002-12-04 Wednesday 15:06 kohler
-
- * mmafm/vectori.cc (1.6), mmpfb/t1rewrit.cc (1.23),
- mmpfb/vectori.cc (1.6): CFF works!
-
-2002-12-04 Wednesday 10:01 kohler
-
- * mmafm/main.cc (1.25), mmpfb/main.cc (1.26), mmpfb/myfont.cc
- (1.28), mmpfb/myfont.hh (1.8), mmpfb/t1rewrit.cc (1.22): more
- adaptations for Type 2 preparation, renamings and indentation
-
-2002-12-03 Tuesday 15:22 kohler
-
- * mmpfb/: myfont.cc (1.27), t1rewrit.cc (1.21): conform to edlib
- update
-
-2002-12-03 Tuesday 13:53 kohler
-
- * mmpfb/t1rewrit.hh (1.9): adapt to t1lib changes
-
-2002-12-03 Tuesday 13:50 kohler
-
- * mmafm/Makefile.am (1.5), mmpfb/Makefile.am (1.5), mmpfb/main.cc
- (1.25), mmpfb/t1rewrit.cc (1.20): moving towards supporting Type
- 2 fonts
-
-2002-10-05 Saturday 11:05 kohler
-
- * mmafm/main.cc (1.24), mmpfb/main.cc (1.24), mmpfb/myfont.cc
- (1.26), mmpfb/myfont.hh (1.7), mmpfb/t1rewrit.cc (1.19): use C++
- names for C #includes
-
-2002-10-05 Saturday 09:11 kohler
-
- * mmafm/mmafm.1 (1.27), mmpfb/mmpfb.1 (1.28): to 1.18
-
-2002-09-30 Monday 13:23 kohler
-
- * mmafm/mmafm.1 (1.26), mmpfb/main.cc (1.23), mmpfb/mmpfb.1 (1.27),
- mmpfb/myfont.cc (1.25): to 1.17
-
-2001-09-17 Monday 18:23 kohler
-
- * mmafm/mmafm.1 (1.25), mmpfb/mmpfb.1 (1.26): 1.16.3: mac os x
-
-2001-09-11 Tuesday 04:47 kohler
-
- * mmpfb/t1rewrit.cc (1.18): final math nitlet: want same result on
- different platforms, despite use of floating point; this seems to
- do the trick
-
-2001-09-11 Tuesday 04:38 kohler
-
- * mmpfb/: t1rewrit.cc (1.14), t1rewrit.hh (1.8), t1rewrit.cc
- (1.15), t1rewrit.cc (1.16), t1rewrit.cc (1.17): more math crap
-
-2001-09-10 Monday 11:42 kohler
-
- * mmafm/main.cc (1.23): correct --help
-
-2001-09-06 Thursday 11:30 kohler
-
- * mmafm/hashmapi.cc (1.5), mmafm/mmafm.1 (1.24), mmafm/vectori.cc
- (1.5), mmpfb/mmpfb.1 (1.25), mmpfb/myfont.cc (1.24),
- mmpfb/t1rewrit.cc (1.13): compilation fixes from Beebe
-
-2001-07-15 Sunday 18:43 kohler
-
- * mmafm/main.cc (1.22), mmafm/mmafm.1 (1.23), mmpfb/main.cc (1.22),
- mmpfb/mmpfb.1 (1.24), mmpfb/t1rewrit.cc (1.12): to mminstance
- 1.16.1: playing with inlines
-
-2001-06-18 Monday 14:07 kohler
-
- * mmafm/mmafm.1 (1.22), mmpfb/mmpfb.1 (1.23): to 1.16
-
-2000-11-04 Saturday 10:51 eddietwo
-
- * mmpfb/myfont.cc (1.23): changes to support gcc-2.96
-
-2000-07-12 Wednesday 11:39 eddietwo
-
- * mmpfb/t1rewrit.cc (1.11), mmafm/mmafm.1 (1.21), mmpfb/mmpfb.1
- (1.22): 1.15
-
-2000-06-22 Thursday 20:12 eddietwo
-
- * mmpfb/: myfont.cc (1.22), myfont.hh (1.6): x
-
-2000-04-20 Thursday 07:29 eddietwo
-
- * Makefile.am (1.3), configure.in (1.4), t1lint/Makefile.am (1.4),
- t1lint/main.cc (1.6), t1lint/t1lint.cc (1.1),
- t1testpage/.cvsignore (1.1), t1testpage/Makefile.am (1.1),
- t1testpage/hashmapi.cc (1.1), t1testpage/t1testpage.cc (1.1),
- t1testpage/vectori.cc (1.1): added t1testpage
-
-2000-04-20 Thursday 07:27 eddietwo
-
- * mmafm/mmafm.1 (1.20), mmpfb/mmpfb.1 (1.21): versionize
-
-2000-04-20 Thursday 07:26 eddietwo
-
- * mmpfb/: main.cc (1.21), myfont.cc (1.21): to v1.13 (synthetic
- fonts)
-
-2000-04-06 Thursday 14:50 eddietwo
-
- * mmafm/Makefile.am (1.4), mmpfb/Makefile.am (1.4): CLEANFILES
-
-2000-04-05 Wednesday 08:45 eddietwo
-
- * mmafm/.cvsignore (1.2), mmafm/Makefile.am (1.3), mmafm/main.cc
- (1.21), mmafm/mmafm.1 (1.19), mmpfb/.cvsignore (1.2),
- mmpfb/Makefile.am (1.3), mmpfb/mmpfb.1 (1.20), mmpfb/myfont.cc
- (1.20), mmpfb/t1rewrit.cc (1.10), mmpfb/t1rewrit.hh (1.7):
- updates for new straccum/edlib/metricslib; fixed mmpfb
-
-2000-04-05 Wednesday 08:40 eddietwo
-
- * Makefile.am (1.2), configure.in (1.3), t1lint/.cvsignore (1.2),
- t1lint/Makefile.am (1.3), t1lint/cscheck.cc (1.2),
- t1lint/cscheck.hh (1.2): better error messages in t1lint
-
-2000-04-03 Monday 08:01 eddietwo
-
- * mmafm/main.cc (1.20), mmafm/mmafm.1 (1.18), mmpfb/mmpfb.1 (1.19):
- include
-
-2000-02-21 Monday 13:59 eddietwo
-
- * mmafm/mmafm.1 (1.17), mmpfb/mmpfb.1 (1.18), mmpfb/myfont.cc
- (1.19): r1_10
-
-2000-01-18 Tuesday 08:00 eddietwo
-
- * mmafm/mmafm.1 (1.16), mmpfb/mmpfb.1 (1.17), mmpfb/t1rewrit.cc
- (1.9): fixed UNKDOUBLE bug and error buffer overrun
-
-2000-01-17 Monday 11:12 eddietwo
-
- * acconfig.h (1.3), configure.in (1.2), t1lint/.cvsignore (1.1),
- t1lint/main.cc (1.5): updates
-
-2000-01-10 Monday 20:03 eddietwo
-
- * mmpfb/: t1rewrit.cc (1.8), t1rewrit.hh (1.6): mminstance 1.8
-
-2000-01-10 Monday 08:39 eddietwo
-
- * mmafm/main.cc (1.19), mmafm/mmafm.1 (1.15), mmpfb/main.cc (1.20),
- mmpfb/mmpfb.1 (1.16), mmpfb/myfont.cc (1.18): copyright changes,
- updated for thanh
-
-1999-12-30 Thursday 13:59 eddietwo
-
- * mmafm/mmafm.1 (1.14), mmpfb/mmpfb.1 (1.15): version 1.7
-
-1999-12-19 Sunday 18:40 eddietwo
-
- * mmpfb/main.cc (1.19): error-related
-
-1999-11-28 Sunday 15:12 eddietwo
-
- * mmafm/mmafm.1 (1.13): %8g not %g; man page rearrange
-
-1999-11-28 Sunday 14:48 eddietwo
-
- * mmafm/main.cc (1.18), mmafm/mmafm.1 (1.12), mmpfb/mmpfb.1 (1.14):
- to 1.6
-
-1999-07-04 Sunday 17:12 eddietwo
-
- * mmpfb/: main.cc (1.18), mmpfb.1 (1.13), t1rewrit.cc (1.7): 1.5
-
-1999-07-04 Sunday 15:01 eddietwo
-
- * mmpfb/myfont.cc (1.17): dont kill things you dont understand
-
-1999-07-04 Sunday 14:55 eddietwo
-
- * mmpfb/: myfont.cc (1.15), myfont.cc (1.16): dont get rid of
- dictionaries inside Blend
-
-1999-07-04 Sunday 14:36 eddietwo
-
- * mmpfb/: main.cc (1.17), myfont.cc (1.14), t1rewrit.cc (1.6),
- t1rewrit.hh (1.5): added --subrs
-
-1999-06-30 Wednesday 08:41 eddietwo
-
- * t1lint/main.cc (1.4): oopses
-
-1999-06-30 Wednesday 08:37 eddietwo
-
- * t1lint/main.cc (1.3): thingies
-
-1999-06-30 Wednesday 08:22 eddietwo
-
- * t1lint/main.cc (1.2): in response to error/landmark updates
-
-1999-06-29 Tuesday 15:04 eddietwo
-
- * t1lint/: cscheck.cc (1.1), cscheck.hh (1.1), hashmapi.cc (1.1),
- main.cc (1.1), point.cc (1.1), point.hh (1.1), vectori.cc (1.1):
- added ifles
-
-1999-06-29 Tuesday 15:03 eddietwo
-
- * acconfig.h (1.2), t1lint/Makefile.am (1.2): t1lint
-
-1999-06-29 Tuesday 12:54 eddietwo
-
- * mmafm/main.cc (1.17), mmpfb/main.cc (1.16), mmpfb/mmpfb.1 (1.12),
- mmpfb/myfont.cc (1.13), mmpfb/myfont.hh (1.5), mmpfb/t1rewrit.cc
- (1.5), mmpfb/t1rewrit.hh (1.4): changed to align with new
- ErrorHandler
-
-1999-06-29 Tuesday 10:05 eddietwo
-
- * .cvsignore (1.1), INSTALL (1.1), Makefile.am (1.1), NEWS (1.1),
- README (1.1), acconfig.h (1.1), configure.in (1.1),
- t1lint/Makefile.am (1.1): first version
-
-1999-06-28 Monday 11:50 eddietwo
-
- * mmafm/mmafm.1 (1.10), mmpfb/mmpfb.1 (1.10), mmafm/mmafm.1 (1.11),
- mmpfb/mmpfb.1 (1.11): manual fixes
-
-1999-06-28 Monday 11:45 eddietwo
-
- * mmafm/main.cc (1.16), mmafm/mmafm.1 (1.9), mmpfb/main.cc (1.15),
- mmpfb/mmpfb.1 (1.9): interpolate an instance by name
-
-1999-06-26 Saturday 10:33 eddietwo
-
- * mmafm/mmafm.1 (1.8), mmpfb/mmpfb.1 (1.8), mmpfb/myfont.cc (1.12):
- to 1.4.1
-
-1999-06-25 Friday 14:34 eddietwo
-
- * mmafm/mmafm.1 (1.7), mmpfb/mmpfb.1 (1.7), mmpfb/myfont.cc (1.11),
- mmpfb/myfont.hh (1.4): to mminstance-1.4
-
-1999-05-21 Friday 13:17 eddietwo
-
- * mmafm/hashmapi.cc (1.4), mmafm/vectori.cc (1.4),
- mmpfb/hashmapi.cc (1.4), mmpfb/myfont.cc (1.10), mmpfb/myfont.hh
- (1.3), mmpfb/t1rewrit.cc (1.4), mmpfb/t1rewrit.hh (1.3),
- mmpfb/vectori.cc (1.5): pragmendectomy
-
-1999-05-21 Friday 13:00 eddietwo
-
- * mmafm/mmafm.1 (1.6), mmpfb/mmpfb.1 (1.6): versionize
-
-1999-05-21 Friday 12:45 eddietwo
-
- * mmafm/main.cc (1.15), mmpfb/main.cc (1.14), mmpfb/myfont.cc
- (1.9), mmpfb/t1rewrit.cc (1.3), mmpfb/t1rewrit.hh (1.2): - got
- rid of #pragmas - STL interface conformance
-
-1999-04-11 Sunday 15:05 eddietwo
-
- * mmafm/main.cc (1.14), mmpfb/main.cc (1.13): second instance of
- 1.3; changed --help text layout
-
-1999-04-11 Sunday 14:57 eddietwo
-
- * mmafm/mmafm.1 (1.5), mmpfb/mmpfb.1 (1.5): to version 1.3
-
-1999-01-25 Monday 09:03 eddietwo
-
- * mmafm/main.cc (1.13), mmpfb/main.cc (1.12): probably just error
- messages
-
-1999-01-24 Sunday 11:40 eddietwo
-
- * mmpfb/: main.cc (1.11), mmpfb.1 (1.4), myfont.cc (1.8),
- vectori.cc (1.4): accepts --quiet, uses PsresDatabase
-
-1999-01-24 Sunday 11:40 eddietwo
-
- * mmafm/: main.cc (1.12), mmafm.1 (1.4), vectori.cc (1.3): now runs
- mmpfb to get the AMCP program
-
-1999-01-22 Friday 14:55 eddietwo
-
- * mmafm/hashmapi.cc (1.3), mmafm/main.cc (1.11), mmafm/vectori.cc
- (1.2), mmpfb/hashmapi.cc (1.3), mmpfb/main.cc (1.10),
- mmpfb/myfont.cc (1.7), mmpfb/t1rewrit.cc (1.2), mmpfb/vectori.cc
- (1.3): config.hized
-
-1999-01-12 Tuesday 11:56 eddietwo
-
- * mmafm/.cvsignore (1.1), mmpfb/.cvsignore (1.1): more .cvsignores
-
-1999-01-12 Tuesday 11:54 eddietwo
-
- * mmafm/Makefile.am (1.2), mmafm/mmafm.1 (1.3), mmpfb/Makefile.am
- (1.2), mmpfb/mmpfb.1 (1.3), mmpfb/myfont.cc (1.6): fixed mmpfb
- (maybe); to 1.3b1
-
-1999-01-02 Saturday 14:24 eddietwo
-
- * mmpfb/myfont.cc (1.5): added a comment about the final underscore
- in the font name
-
-1998-12-18 Friday 16:20 eddietwo
-
- * mmafm/mmafm.1 (1.2), mmpfb/mmpfb.1 (1.2): actually 1.2
-
-1998-12-18 Friday 15:57 eddietwo
-
- * mmpfb/main.cc (1.9): short_usage label removed
-
-1998-12-18 Friday 15:50 eddietwo
-
- * mmafm/Makefile.am (1.1), mmafm/Makefile.in (1.12), mmafm/main.cc
- (1.10), mmafm/mmafm.1 (1.1), mmafm/mmafm.man (1.3),
- mmpfb/Makefile.am (1.1), mmpfb/Makefile.in (1.13), mmpfb/main.cc
- (1.8), mmpfb/mmpfb.1 (1.1), mmpfb/mmpfb.man (1.3): initial switch
- to 1.2
-
-1998-09-27 Sunday 12:58 eddietwo
-
- * mmpfb/Makefile.in (1.12): nmakefile stuff
-
-1998-09-27 Sunday 12:57 eddietwo
-
- * mmafm/Makefile.in (1.11), mmpfb/Makefile.in (1.11): LIBS
-
-1998-09-27 Sunday 12:52 eddietwo
-
- * mmafm/Makefile.in (1.10), mmpfb/Makefile.in (1.10): VPATH making
-
-1998-09-26 Saturday 21:49 eddietwo
-
- * mmpfb/: Makefile.in (1.9), main.cc (1.7), mmpfb.man (1.2),
- myfont.cc (1.4), myfont.hh (1.2), t1rewrit.cc (1.1), t1rewrit.hh
- (1.1), vectori.cc (1.2): * moved install target into local
- makefile * changes for GNUCODSTD * improved mmpfb a lot (does a
- better job)
-
-1998-09-26 Saturday 21:49 eddietwo
-
- * mmafm/: Makefile.in (1.9), main.cc (1.9), mmafm.man (1.2): *
- moved install target into local makefile * changes for GNUCODSTD
-
-1998-09-18 Friday 10:34 eddietwo
-
- * mmafm/main.cc (1.8), mmpfb/main.cc (1.6): That's right: message
- removed
-
-1998-09-17 Thursday 09:51 eddietwo
-
- * mmafm/Makefile.in (1.8), mmpfb/Makefile.in (1.8): more
- configuration
-
-1998-09-16 Wednesday 18:10 eddietwo
-
- * mmafm/mmafm.man (1.1), mmpfb/mmpfb.man (1.1): forgot the man
- pages
-
-1998-09-16 Wednesday 18:10 eddietwo
-
- * mmafm/Makefile.in (1.7), mmafm/mmafm.min (1.3), mmpfb/Makefile.in
- (1.7), mmpfb/mmpfb.min (1.3): to 1.0; mostly config changes
-
-1998-09-02 Wednesday 12:00 eddietwo
-
- * mmafm/Makefile.in (1.6), mmafm/main.cc (1.7), mmpfb/Makefile.in
- (1.6), mmpfb/main.cc (1.5): changes from summer
-
-1998-05-25 Monday 23:32 eddietwo
-
- * mmafm/Makefile.in (1.5), mmpfb/Makefile.in (1.5): Makefile.in
- cosmetics
-
-1998-05-15 Friday 14:24 eddietwo
-
- * mmafm/main.cc (1.6): changes to 0.91 (mmafm bug fixes)
-
-1998-04-07 Tuesday 14:45 eddietwo
-
- * mmafm/hashmapi.cc (1.2), mmpfb/hashmapi.cc (1.2): #pragma
- implementation
-
-1998-04-07 Tuesday 14:42 eddietwo
-
- * mmpfb/myfont.cc (1.3): Changes to work with t1lib
-
-1998-04-03 Friday 06:32 eddietwo
-
- * mmafm/main.cc (1.5), mmpfb/main.cc (1.4), mmpfb/myfont.cc (1.2):
- Changes to keep up with t1lib,etc.
-
-1998-03-27 Friday 11:30 eddietwo
-
- * mmafm/Makefile.in (1.4), mmafm/main.cc (1.4), mmpfb/Makefile.in
- (1.4), mmpfb/main.cc (1.3): FontFinder -> MetricsFinder and
- Type1MMSpace::create --> Type1Font
-
-1998-03-04 Wednesday 10:15 eddietwo
-
- * mmafm/Makefile.in (1.3), mmafm/main.cc (1.3), mmpfb/Makefile.in
- (1.3), mmpfb/main.cc (1.2): changed configuration and 1997 ->
- 1997-8
-
-1998-03-04 Wednesday 09:43 eddietwo
-
- * mmafm/Makefile.in (1.2), mmafm/mmafm.min (1.2), mmpfb/Makefile.in
- (1.2), mmpfb/mmpfb.min (1.2): Changed installation; added `-o
- t1mm.o' to submakefiles
-
-1998-03-04 Wednesday 09:31 eddietwo
-
- * mmafm/main.cc (1.2), mmafm/mmafm.min (1.1), mmpfb/mmpfb.min
- (1.1): Added manual pages; v0.8->v0.9
-
-1998-03-03 Tuesday 15:19 eddietwo
-
- * mmafm/Makefile.in (1.1), mmafm/hashmapi.cc (1.1), mmafm/main.cc
- (1.1), mmafm/vectori.cc (1.1), mmpfb/Makefile.in (1.1),
- mmpfb/hashmapi.cc (1.1), mmpfb/main.cc (1.1), mmpfb/myfont.cc
- (1.1), mmpfb/myfont.hh (1.1), mmpfb/vectori.cc (1.1): Initial
- revision
-
diff --git a/Build/source/utils/lcdf-typetools/Makefile.am b/Build/source/utils/lcdf-typetools/Makefile.am
index 969122a18f0..6fd1265708e 100644
--- a/Build/source/utils/lcdf-typetools/Makefile.am
+++ b/Build/source/utils/lcdf-typetools/Makefile.am
@@ -2,9 +2,9 @@
AUTOMAKE_OPTIONS = foreign check-news
SUBDIRS = liblcdf libefont @SELECTED_SUBDIRS@
-DIST_SUBDIRS = liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage
+DIST_SUBDIRS = liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42
-pkgdata_DATA = glyphlist.txt 7t.enc
+pkgdata_DATA = glyphlist.txt texglyphlist.txt 7t.enc
EXTRA_DIST = \
ONEWS \
@@ -17,6 +17,7 @@ EXTRA_DIST = \
include/lcdf/hashmap.hh include/lcdf/hashmap.cc \
include/lcdf/inttypes.h \
include/lcdf/landmark.hh \
+ include/lcdf/md5.h \
include/lcdf/permstr.hh \
include/lcdf/point.hh \
include/lcdf/slurper.hh \
@@ -40,6 +41,7 @@ EXTRA_DIST = \
include/efont/otfgsub.hh \
include/efont/otfname.hh \
include/efont/otfos2.hh \
+ include/efont/otfpost.hh \
include/efont/pairop.hh \
include/efont/psres.hh \
include/efont/t1bounds.hh \
@@ -51,13 +53,15 @@ EXTRA_DIST = \
include/efont/t1mm.hh \
include/efont/t1rw.hh \
include/efont/t1unparser.hh \
+ include/efont/ttfcs.hh \
glyphlist.txt \
+ texglyphlist.txt \
7t.enc
liblcdf libefont:
cd $@ && $(MAKE)
libefont: liblcdf
-cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage: liblcdf libefont
+cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42: liblcdf libefont
cd $@ && $(MAKE)
srclinks:
@@ -65,7 +69,7 @@ srclinks:
cd libefont && $(MAKE) srclinks
versionize:
- perl -pi -e 's/^\.ds V.*/.ds V $(VERSION)/;' $(top_srcdir)/cfftot1/cfftot1.1 $(top_srcdir)/mmafm/mmafm.1 $(top_srcdir)/mmpfb/mmpfb.1 $(top_srcdir)/otfinfo/otfinfo.1 $(top_srcdir)/otftotfm/otftotfm.1 $(top_srcdir)/t1dotlessj/t1dotlessj.1 $(top_srcdir)/t1lint/t1lint.1 $(top_srcdir)/t1reencode/t1reencode.1 $(top_srcdir)/t1testpage/t1testpage.1
+ perl -pi -e 's/^\.ds V.*/.ds V $(VERSION)/;' $(top_srcdir)/cfftot1/cfftot1.1 $(top_srcdir)/mmafm/mmafm.1 $(top_srcdir)/mmpfb/mmpfb.1 $(top_srcdir)/otfinfo/otfinfo.1 $(top_srcdir)/otftotfm/otftotfm.1 $(top_srcdir)/t1dotlessj/t1dotlessj.1 $(top_srcdir)/t1lint/t1lint.1 $(top_srcdir)/t1reencode/t1reencode.1 $(top_srcdir)/t1testpage/t1testpage.1 $(top_srcdir)/ttftotype42/ttftotype42.1
perl -pi -e 's/^(\U$(PACKAGE)\E) [\d.ab]+$$/$$1 $(VERSION)/;' $(top_srcdir)/README
-.PHONY: srclinks rpm liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage
+.PHONY: srclinks rpm liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42
diff --git a/Build/source/utils/lcdf-typetools/Makefile.in b/Build/source/utils/lcdf-typetools/Makefile.in
index 77b6ff34528..6c2a51c777e 100644
--- a/Build/source/utils/lcdf-typetools/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -169,8 +169,8 @@ sysconfdir = @sysconfdir@
target_alias = @target_alias@
AUTOMAKE_OPTIONS = foreign check-news
SUBDIRS = liblcdf libefont @SELECTED_SUBDIRS@
-DIST_SUBDIRS = liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage
-pkgdata_DATA = glyphlist.txt 7t.enc
+DIST_SUBDIRS = liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42
+pkgdata_DATA = glyphlist.txt texglyphlist.txt 7t.enc
EXTRA_DIST = \
ONEWS \
lcdf-typetools.spec \
@@ -182,6 +182,7 @@ EXTRA_DIST = \
include/lcdf/hashmap.hh include/lcdf/hashmap.cc \
include/lcdf/inttypes.h \
include/lcdf/landmark.hh \
+ include/lcdf/md5.h \
include/lcdf/permstr.hh \
include/lcdf/point.hh \
include/lcdf/slurper.hh \
@@ -205,6 +206,7 @@ EXTRA_DIST = \
include/efont/otfgsub.hh \
include/efont/otfname.hh \
include/efont/otfos2.hh \
+ include/efont/otfpost.hh \
include/efont/pairop.hh \
include/efont/psres.hh \
include/efont/t1bounds.hh \
@@ -216,7 +218,9 @@ EXTRA_DIST = \
include/efont/t1mm.hh \
include/efont/t1rw.hh \
include/efont/t1unparser.hh \
+ include/efont/ttfcs.hh \
glyphlist.txt \
+ texglyphlist.txt \
7t.enc
all: config.h
@@ -299,7 +303,13 @@ uninstall-pkgdataDATA:
# (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
- @set fnord $$MAKEFLAGS; amf=$$2; \
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
dot_seen=no; \
target=`echo $@ | sed s/-recursive//`; \
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -311,7 +321,7 @@ $(RECURSIVE_TARGETS):
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ || eval $$failcom; \
done; \
if test "$$dot_seen" = "no"; then \
$(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
@@ -319,7 +329,13 @@ $(RECURSIVE_TARGETS):
mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
- @set fnord $$MAKEFLAGS; amf=$$2; \
+ @failcom='exit 1'; \
+ for f in x $$MAKEFLAGS; do \
+ case $$f in \
+ *=* | --[!k]*);; \
+ *k*) failcom='fail=yes';; \
+ esac; \
+ done; \
dot_seen=no; \
case "$@" in \
distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
@@ -340,7 +356,7 @@ maintainer-clean-recursive:
local_target="$$target"; \
fi; \
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+ || eval $$failcom; \
done && test -z "$$fail"
tags-recursive:
list='$(SUBDIRS)'; for subdir in $$list; do \
@@ -662,7 +678,7 @@ uninstall-info: uninstall-info-recursive
liblcdf libefont:
cd $@ && $(MAKE)
libefont: liblcdf
-cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage: liblcdf libefont
+cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42: liblcdf libefont
cd $@ && $(MAKE)
srclinks:
@@ -670,10 +686,10 @@ srclinks:
cd libefont && $(MAKE) srclinks
versionize:
- perl -pi -e 's/^\.ds V.*/.ds V $(VERSION)/;' $(top_srcdir)/cfftot1/cfftot1.1 $(top_srcdir)/mmafm/mmafm.1 $(top_srcdir)/mmpfb/mmpfb.1 $(top_srcdir)/otfinfo/otfinfo.1 $(top_srcdir)/otftotfm/otftotfm.1 $(top_srcdir)/t1dotlessj/t1dotlessj.1 $(top_srcdir)/t1lint/t1lint.1 $(top_srcdir)/t1reencode/t1reencode.1 $(top_srcdir)/t1testpage/t1testpage.1
+ perl -pi -e 's/^\.ds V.*/.ds V $(VERSION)/;' $(top_srcdir)/cfftot1/cfftot1.1 $(top_srcdir)/mmafm/mmafm.1 $(top_srcdir)/mmpfb/mmpfb.1 $(top_srcdir)/otfinfo/otfinfo.1 $(top_srcdir)/otftotfm/otftotfm.1 $(top_srcdir)/t1dotlessj/t1dotlessj.1 $(top_srcdir)/t1lint/t1lint.1 $(top_srcdir)/t1reencode/t1reencode.1 $(top_srcdir)/t1testpage/t1testpage.1 $(top_srcdir)/ttftotype42/ttftotype42.1
perl -pi -e 's/^(\U$(PACKAGE)\E) [\d.ab]+$$/$$1 $(VERSION)/;' $(top_srcdir)/README
-.PHONY: srclinks rpm liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage
+.PHONY: srclinks rpm liblcdf libefont cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
diff --git a/Build/source/utils/lcdf-typetools/NEWS b/Build/source/utils/lcdf-typetools/NEWS
index 07607bec603..4483507e33e 100644
--- a/Build/source/utils/lcdf-typetools/NEWS
+++ b/Build/source/utils/lcdf-typetools/NEWS
@@ -1,5 +1,98 @@
LCDF Typetools NEWS
+Version 2.46 29.Oct.2006
+
+* otftotfm: Base metrics files now reflect the actual base font metrics
+ more accurately (rather than containing virtual-font-only metrics
+ information, such as letterspacing). This should make it easier to tell,
+ using "diff", whether two base metrics files contain the same data.
+
+* otftotfm: '--no-type1' does not affect dotless-j font generation; use
+ '--no-dotlessj' for that (Michael Zedler).
+
+* otftotfm: Don't generate virtual fonts unless you have to (Michael
+ Zedler).
+
+
+Version 2.45 17.Sep.2006
+
+* Include new ttftotype42 program.
+
+
+Version 2.44 16.Sep.2006
+
+* otfinfo/otftotfm: Support new fonts whose 'size' features are defined
+ correctly. Thanks to Read Roberts for defining the compatibility check.
+
+
+Version 2.43 22.Aug.2006
+
+* otftotfm: Check for availability of kpse_opentype_format. Bug reported
+ by Carsten Luckmann.
+
+
+Version 2.42 22.Aug.2006
+
+* otftotfm: Any --altselector-char is actually encoded, so you can use it
+ as a regular character as well as an altselector. Suggested by Carsten
+ Luckmann.
+
+
+Version 2.41 12.Aug.2006
+
+* otftotfm: Some TrueType fixes. Problems reported by Michael Zedler.
+
+
+Version 2.40 1.Aug.2006
+
+* otftotfm: Initial support for TrueType-flavored OpenType fonts. Inspired
+ because John Owens is working with Microsoft's Calibri et al.
+
+
+Version 2.39 11.Jul.2006
+
+* cfftot1: Unify some subroutines previously missed, for slightly smaller
+ output. Reported by Michael Zedler.
+
+
+Version 2.38 8.May.2006
+
+* otfinfo: Add '--info' option. Requested by John Owens.
+
+
+Version 2.37 25.Jan.2006
+
+* otftotfm: Add 'ringfitted'. Requested by Michael Zedler. Required bug
+ fix.
+
+
+Version 2.36 9.Nov.2005
+
+* otfinfo: Add '-a/--family' option. Based on patch from Ottavio G. Rizzo.
+
+* otftotfm: Fix bug where '-q' would inhibit map line output, reported by
+ Achim Blumensath.
+
+
+Version 2.35 3.Oct.2005
+
+* otftotfm: Allow '--ligkern "T h=:T_h"' (note lack of spaces around '=:').
+ Inspired by Michael Saunders.
+
+* otftotfm: Split TeX extensions out from 'glyphlist.txt' into
+ 'texglyphlist.txt', leaving 'glyphlist.txt' exactly as distributed by
+ Adobe. Otftotfm reads both files. Requested by Werner Lemberg.
+
+* otftotfm: Add '% WARNMISSING' and '--warn-missing', so that missing
+ characters result in blots and cause warnings when processed by dvips.
+ Requested by Michael Zedler.
+
+* otfinfo: Add '-v/--font-version' option and document '-t/--tables' option.
+
+* t1reencode: Add many more standard encodings to t1reencode, and fix
+ existing ones. Patch from Peter Betzler.
+
+
Version 2.34 11.Jun.2005
* otftotfm: Search for 'glyphlist.txt' using kpathsea, and set kpathsea
diff --git a/Build/source/utils/lcdf-typetools/README b/Build/source/utils/lcdf-typetools/README
index f098f2cc3ac..1e9301b5c2c 100644
--- a/Build/source/utils/lcdf-typetools/README
+++ b/Build/source/utils/lcdf-typetools/README
@@ -1,4 +1,4 @@
-LCDF-TYPETOOLS 2.34
+LCDF-TYPETOOLS 2.46
===================
USAGE
@@ -46,6 +46,10 @@ information.
one you specify. See the manual page 't1reencode/t1reencode.1' for more
information.
+ Ttftotype42 creates a Type 42 wrapper for a TrueType or
+TrueType-flavored OpenType font. See the manual page
+'ttftotype42/ttftotype42.1' for more information.
+
The final program is preliminary: t1testpage creates a PostScript test
page for a given font file. See the manual page 't1testpage/t1testpage.1'
for more information.
@@ -121,12 +125,12 @@ for a particular font.
COPYRIGHT/LICENSE
-----------------
- All source code is Copyright (c) 1997-2005 Eddie Kohler.
+ All source code is Copyright (c) 1997-2006 Eddie Kohler.
- This code is distributed under the GNU General Public License, Version
-2, or, at your discretion, any later version. The GNU General Public
-License is available via the Web at <http://www.gnu.org/licenses/gpl.html>,
-or in the COPYING file in this directory.
+ This code is distributed under the GNU General Public License, Version 2
+(and only Version 2). The GNU General Public License is available via the
+Web at <http://www.gnu.org/licenses/gpl.html>, or in the COPYING file in
+this directory.
AUTHOR
diff --git a/Build/source/utils/lcdf-typetools/aclocal.m4 b/Build/source/utils/lcdf-typetools/aclocal.m4
index 784d2455c26..b7a0e851eea 100644
--- a/Build/source/utils/lcdf-typetools/aclocal.m4
+++ b/Build/source/utils/lcdf-typetools/aclocal.m4
@@ -1,7 +1,7 @@
-# generated automatically by aclocal 1.9.2 -*- Autoconf -*-
+# generated automatically by aclocal 1.9.6 -*- Autoconf -*-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
-# Free Software Foundation, Inc.
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -11,23 +11,11 @@
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
-# -*- Autoconf -*-
-# Copyright (C) 2002, 2003 Free Software Foundation, Inc.
-# Generated from amversion.in; do not edit by hand.
-
-# This program 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.
-
-# This program 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
+# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
# AM_AUTOMAKE_VERSION(VERSION)
# ----------------------------
@@ -40,26 +28,15 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"])
# Call AM_AUTOMAKE_VERSION so it can be traced.
# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
- [AM_AUTOMAKE_VERSION([1.9.2])])
-
-# AM_AUX_DIR_EXPAND
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
+ [AM_AUTOMAKE_VERSION([1.9.6])])
-# This program 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.
+# AM_AUX_DIR_EXPAND -*- Autoconf -*-
-# This program 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.
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to
@@ -106,26 +83,16 @@ AC_PREREQ([2.50])dnl
am_aux_dir=`cd $ac_aux_dir && pwd`
])
-# AM_CONDITIONAL -*- Autoconf -*-
+# AM_CONDITIONAL -*- Autoconf -*-
-# Copyright (C) 1997, 2000, 2001, 2003, 2004 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 6
+# serial 7
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
@@ -149,26 +116,15 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
-# serial 7 -*- Autoconf -*-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# This program 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.
-
-# This program 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.
-
+# serial 8
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
@@ -177,7 +133,6 @@ fi])])
# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
# _AM_DEPENDENCIES(NAME)
# ----------------------
# See how the compiler implements dependency checking.
@@ -317,27 +272,16 @@ AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
AC_SUBST([AMDEPBACKSLASH])
])
-# Generate code to set up dependency tracking. -*- Autoconf -*-
-
-# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004
-# Free Software Foundation, Inc.
-
-# This program 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.
+# Generate code to set up dependency tracking. -*- Autoconf -*-
-# This program 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.
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-#serial 2
+#serial 3
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
@@ -396,54 +340,31 @@ AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
[AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
])
-# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 7
+# serial 8
# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS.
AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
-# Do all the work for Automake. -*- Autoconf -*-
-
-# This macro actually does too much some checks are only needed if
-# your package does certain things. But this isn't really a big deal.
+# Do all the work for Automake. -*- Autoconf -*-
-# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# This program 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.
-
-# This program 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.
+# serial 12
-# serial 11
+# This macro actually does too much. Some checks are only needed if
+# your package does certain things. But this isn't really a big deal.
# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
# AM_INIT_AUTOMAKE([OPTIONS])
@@ -545,51 +466,27 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
# AM_PROG_INSTALL_SH
# ------------------
# Define $install_sh.
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
-
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"$am_aux_dir/install-sh"}
AC_SUBST(install_sh)])
-# -*- Autoconf -*-
-# Copyright (C) 2003 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
+# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 1
+# serial 2
# Check whether the underlying file-system supports filenames
# with a leading dot. For instance MS-DOS doesn't.
@@ -604,28 +501,17 @@ fi
rmdir .tst 2>/dev/null
AC_SUBST([am__leading_dot])])
-# Add --enable-maintainer-mode option to configure.
+# Add --enable-maintainer-mode option to configure. -*- Autoconf -*-
# From Jim Meyering
-# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004
+# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# This program 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.
-
-# This program 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.
-
-# serial 3
+# serial 4
AC_DEFUN([AM_MAINTAINER_MODE],
[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
@@ -644,26 +530,15 @@ AC_DEFUN([AM_MAINTAINER_MODE],
AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
-# Check to see how 'make' treats includes. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
-
-# This program 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.
+# Check to see how 'make' treats includes. -*- Autoconf -*-
-# This program 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.
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 2
+# serial 3
# AM_MAKE_INCLUDE()
# -----------------
@@ -707,27 +582,16 @@ AC_MSG_RESULT([$_am_result])
rm -f confinc confmf
])
-# -*- Autoconf -*-
-
-
-# Copyright (C) 1997, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# This program 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.
+# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
-# This program 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.
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 3
+# serial 4
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
@@ -753,27 +617,16 @@ else
fi
])
+# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
# AM_PROG_MKDIR_P
# ---------------
# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise.
-
-# Copyright (C) 2003, 2004 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
-
+#
# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories
# created by `make install' are always world readable, even if the
# installer happens to have an overly restrictive umask (e.g. 077).
@@ -827,26 +680,15 @@ else
fi
AC_SUBST([mkdir_p])])
-# Helper functions for option handling. -*- Autoconf -*-
-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+# Helper functions for option handling. -*- Autoconf -*-
-# This program 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.
-
-# This program 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.
+# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 2
+# serial 3
# _AM_MANGLE_OPTION(NAME)
# -----------------------
@@ -871,28 +713,16 @@ AC_DEFUN([_AM_SET_OPTIONS],
AC_DEFUN([_AM_IF_OPTION],
[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-#
-# Check to make sure that the build environment is sane.
-#
+# Check to make sure that the build environment is sane. -*- Autoconf -*-
-# Copyright (C) 1996, 1997, 2000, 2001, 2003 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
-# serial 3
+# serial 4
# AM_SANITY_CHECK
# ---------------
@@ -935,25 +765,14 @@ Check your system clock])
fi
AC_MSG_RESULT(yes)])
-# AM_PROG_INSTALL_STRIP
-
-# Copyright (C) 2001, 2003 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
+# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+# AM_PROG_INSTALL_STRIP
+# ---------------------
# One issue with vendor `install' (even GNU) is that you can't
# specify the program used to strip binaries. This is especially
# annoying in cross-compiling environments, where the build's strip
@@ -976,25 +795,13 @@ AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Check how to create a tarball. -*- Autoconf -*-
-# Copyright (C) 2004 Free Software Foundation, Inc.
-
-# This program 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.
-
-# This program 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.
-
-# serial 1
+# Copyright (C) 2004, 2005 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+# serial 2
# _AM_PROG_TAR(FORMAT)
# --------------------
diff --git a/Build/source/utils/lcdf-typetools/cfftot1/Makefile.in b/Build/source/utils/lcdf-typetools/cfftot1/Makefile.in
index 261bba453e7..11e6827e9d7 100644
--- a/Build/source/utils/lcdf-typetools/cfftot1/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/cfftot1/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(cfftot1_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.1 b/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.1
index dbe0512c1da..46c28ad31e1 100644
--- a/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.1
+++ b/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.1
@@ -1,4 +1,4 @@
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -84,4 +84,4 @@ and #5177,
Version 1.4
'
.SH AUTHOR
-Eddie Kohler (kohler@icir.org)
+Eddie Kohler (kohler@cs.ucla.edu)
diff --git a/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.cc b/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.cc
index c3534987b79..4f43d15742c 100644
--- a/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.cc
+++ b/Build/source/utils/lcdf-typetools/cfftot1/cfftot1.cc
@@ -1,6 +1,6 @@
/* cfftot1.cc -- driver for translating CFF fonts to Type 1 fonts
*
- * Copyright (c) 2002-2004 Eddie Kohler
+ * Copyright (c) 2002-2006 Eddie Kohler
*
* This program 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
@@ -204,12 +204,12 @@ main(int argc, char *argv[])
if (clp->negated)
errh = ErrorHandler::default_handler();
else
- errh = ErrorHandler::silent_handler();
+ errh = new SilentErrorHandler;
break;
case VERSION_OPT:
printf("cfftot1 (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 2002-2004 Eddie Kohler\n\
+ printf("Copyright (C) 2002-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
diff --git a/Build/source/utils/lcdf-typetools/cfftot1/maket1font.cc b/Build/source/utils/lcdf-typetools/cfftot1/maket1font.cc
index 21e1c186146..f693ce8b0ba 100644
--- a/Build/source/utils/lcdf-typetools/cfftot1/maket1font.cc
+++ b/Build/source/utils/lcdf-typetools/cfftot1/maket1font.cc
@@ -1,6 +1,6 @@
/* maket1font.{cc,hh} -- translate CFF fonts to Type 1 fonts
*
- * Copyright (c) 2002-2005 Eddie Kohler
+ * Copyright (c) 2002-2006 Eddie Kohler
*
* This program 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
@@ -75,6 +75,7 @@ class MakeType1CharstringInterp::Subr { public:
void update() { _stamp = max_stamp; }
static void bump_date() { max_stamp++; }
+ //String name(const MakeType1CharstringInterp *) const;
Type1Charstring *charstring(const MakeType1CharstringInterp *) const;
int ncalls() const { return _calls.size(); }
@@ -192,6 +193,24 @@ MakeType1CharstringInterp::csr_subr(CsRef csr, bool force) const
return what;
}
+#if 0
+String
+MakeType1CharstringInterp::Subr::name(const MakeType1CharstringInterp *mcsi) const
+{
+ int n = (_csr & CSR_NUM);
+ switch (_csr & CSR_TYPE) {
+ case CSR_SUBR:
+ return "subr" + String(n);
+ case CSR_GSUBR:
+ return "gsubr" + String(n);
+ case CSR_GLYPH:
+ return mcsi->output()->glyph_name(n);
+ default:
+ return "";
+ }
+}
+#endif
+
Type1Charstring *
MakeType1CharstringInterp::Subr::charstring(const MakeType1CharstringInterp *mcsi) const
{
@@ -215,14 +234,17 @@ MakeType1CharstringInterp::Subr::transfer_nested_calls(int pos, int length, Subr
int right = pos + length;
for (int i = 0; i < _calls.size(); i++) {
Subr *cs = _calls[i];
- for (int j = 0; j < cs->_callers.size(); j++) {
- Caller &c = cs->_callers[j];
- if (c.subr == this && pos <= c.pos && c.pos + c.len <= right) {
- c.subr = new_caller;
- c.pos -= pos;
- new_caller->add_call(cs);
+ // 11.Jul.2006 - remember not to shift the new caller's records! (Michael Zedler)
+ if (cs != new_caller)
+ for (int j = 0; j < cs->_callers.size(); j++) {
+ Caller &c = cs->_callers[j];
+ if (c.subr == this && pos <= c.pos && c.pos + c.len <= right) {
+ // shift caller to point at the subroutine
+ c.subr = new_caller;
+ c.pos -= pos;
+ new_caller->add_call(cs);
+ }
}
- }
}
}
@@ -284,7 +306,7 @@ MakeType1CharstringInterp::Subr::unify(MakeType1CharstringInterp *mcsi)
if (!_callers.size())
return false;
- assert(!_calls.size());
+ assert(!_calls.size()); // because this hasn't been unified yet
// Find the smallest shared substring.
String substr = _callers[0].charstring(mcsi);
@@ -312,18 +334,20 @@ MakeType1CharstringInterp::Subr::unify(MakeType1CharstringInterp *mcsi)
_output_subrno = mcsi->output()->nsubrs();
mcsi->output()->set_subr(_output_subrno, Type1Charstring(substr + "\013"));
- // note calls
+ // This subr has become real, so it is suitable for later unifications.
+ // Mark it as having called any subroutines contained completely within itself.
+ // How to do this? Look at one caller, and go over all its calls.
_callers[0].subr->transfer_nested_calls(_callers[0].pos, _callers[0].len, this);
// adapt callers
String callsubr_string = Type1CharstringGen::callsubr_string(_output_subrno);
+
for (int i = 0; i < _callers.size(); i++)
// 13.Jun.2003 - must check whether _callers[i].subr exists: if we
// called a subroutine more than once, change_callers() might have
// zeroed it out.
if (_callers[i].subr && _callers[i].subr != this) {
Subr::Caller c = _callers[i];
- //fprintf(stderr, " SUBSTRING %08x:%d+%d\n", c.subr->_csr, c.pos, c.len);
c.subr->charstring(mcsi)->assign_substring(c.pos, c.len, callsubr_string);
Subr::bump_date();
for (int j = 0; j < c.subr->ncalls(); j++)
@@ -409,7 +433,7 @@ MakeType1CharstringInterp::run(const CharstringProgram *program, Type1Font *outp
run(program->glyph_context(i), receptacle, errh);
#if 0
PermString n = program->glyph_name(i);
- if (1 || n == "one") {
+ if (n == "integral.disp") {
fprintf(stderr, "%s was %s\n", n.c_str(), CharstringUnparser::unparse(*program->glyph(i)).c_str());
fprintf(stderr, "%s == %s\n", n.c_str(), CharstringUnparser::unparse(receptacle).c_str());
}
diff --git a/Build/source/utils/lcdf-typetools/config.h.in b/Build/source/utils/lcdf-typetools/config.h.in
index a366c21afa8..6ed2f7049ab 100644
--- a/Build/source/utils/lcdf-typetools/config.h.in
+++ b/Build/source/utils/lcdf-typetools/config.h.in
@@ -27,6 +27,10 @@
/* Define to 1 if you have the `ctime' function. */
#undef HAVE_CTIME
+/* Define to 1 if you have the declaration of `kpse_opentype_format', and to 0
+ if you don't. */
+#undef HAVE_DECL_KPSE_OPENTYPE_FORMAT
+
/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
*/
#undef HAVE_DIRENT_H
diff --git a/Build/source/utils/lcdf-typetools/configure b/Build/source/utils/lcdf-typetools/configure
index 43f07779ac6..f9aa6ab26e1 100755
--- a/Build/source/utils/lcdf-typetools/configure
+++ b/Build/source/utils/lcdf-typetools/configure
@@ -870,6 +870,7 @@ Optional Features:
--disable-t1lint do not build the t1lint program
--disable-t1reencode do not build the t1reencode program
--disable-t1testpage do not build the t1testpage program
+ --disable-ttftotype42 do not build the ttftotype42 program
--enable-tetex-build build as part of a teTeX installation
--disable-selfauto-set disable setting SELFAUTO variables from kpsewhich
--disable-auto-cfftot1 disable running cfftot1 from otftotfm
@@ -1638,7 +1639,7 @@ fi
# Define the identity of the package.
PACKAGE=lcdf-typetools
- VERSION=2.34
+ VERSION=2.46
cat >>confdefs.h <<_ACEOF
@@ -4413,9 +4414,16 @@ if test "${enable_t1testpage+set}" = set; then
else
enable_t1testpage=yes
fi;
+# Check whether --enable-ttftotype42 or --disable-ttftotype42 was given.
+if test "${enable_ttftotype42+set}" = set; then
+ enableval="$enable_ttftotype42"
+ :
+else
+ enable_ttftotype42=yes
+fi;
SELECTED_SUBDIRS=''
-for i in cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage; do
+for i in cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42; do
y=`eval 'echo $enable_'"$i"`
if test "x$y" != xno; then SELECTED_SUBDIRS="$SELECTED_SUBDIRS $i"; fi
done
@@ -4463,6 +4471,8 @@ directory. I expected it to be in $srcdir/../../texk/kpathsea.
fi
CPPFLAGS="$CPPFLAGS -I\$(top_builddir)/../../texk -I\$(top_srcdir)/../../texk"
LDFLAGS="$LDFLAGS -L\$(top_builddir)/../../texk/kpathsea/.libs"
+ { echo "$as_me:$LINENO: tetex build of lcdf-typetools, CPPFLAGS now: $CPPFLAGS" >&5
+echo "$as_me: tetex build of lcdf-typetools, CPPFLAGS now: $CPPFLAGS" >&6;}
elif test "x$kpathsea" != x -a "x$kpathsea" != xyes; then
CPPFLAGS="$CPPFLAGS -I$kpathsea/include"
LDFLAGS="$LDFLAGS -L$kpathsea/lib"
@@ -5132,6 +5142,87 @@ _ACEOF
LIBKPATHSEA='-lkpathsea'
LIBKPATHSEA_DEP=''
fi
+
+ if test "x$enable_tetex_build" = xyes; then
+ cat >>confdefs.h <<\_ACEOF
+#define HAVE_DECL_KPSE_OPENTYPE_FORMAT 1
+_ACEOF
+
+ else
+ echo "$as_me:$LINENO: checking whether kpse_opentype_format is declared" >&5
+echo $ECHO_N "checking whether kpse_opentype_format is declared... $ECHO_C" >&6
+if test "${ac_cv_have_decl_kpse_opentype_format+set}" = set; then
+ echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <kpathsea/kpathsea.h>
+
+int
+main ()
+{
+#ifndef kpse_opentype_format
+ char *p = (char *) kpse_opentype_format;
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+ (eval $ac_compile) 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } &&
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest.$ac_objext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ ac_cv_have_decl_kpse_opentype_format=yes
+else
+ echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_have_decl_kpse_opentype_format=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_have_decl_kpse_opentype_format" >&5
+echo "${ECHO_T}$ac_cv_have_decl_kpse_opentype_format" >&6
+if test $ac_cv_have_decl_kpse_opentype_format = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_KPSE_OPENTYPE_FORMAT 1
+_ACEOF
+
+:
+else
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_KPSE_OPENTYPE_FORMAT 0
+_ACEOF
+
+:
+fi
+
+
+ fi
fi
@@ -8513,7 +8604,7 @@ _ACEOF
- ac_config_files="$ac_config_files Makefile liblcdf/Makefile libefont/Makefile cfftot1/Makefile mmafm/Makefile mmpfb/Makefile otfinfo/Makefile otftotfm/Makefile t1dotlessj/Makefile t1lint/Makefile t1reencode/Makefile t1testpage/Makefile"
+ ac_config_files="$ac_config_files Makefile liblcdf/Makefile libefont/Makefile cfftot1/Makefile mmafm/Makefile mmpfb/Makefile otfinfo/Makefile otftotfm/Makefile t1dotlessj/Makefile t1lint/Makefile t1reencode/Makefile t1testpage/Makefile ttftotype42/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -9089,6 +9180,7 @@ do
"t1lint/Makefile" ) CONFIG_FILES="$CONFIG_FILES t1lint/Makefile" ;;
"t1reencode/Makefile" ) CONFIG_FILES="$CONFIG_FILES t1reencode/Makefile" ;;
"t1testpage/Makefile" ) CONFIG_FILES="$CONFIG_FILES t1testpage/Makefile" ;;
+ "ttftotype42/Makefile" ) CONFIG_FILES="$CONFIG_FILES ttftotype42/Makefile" ;;
"depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
"config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
*) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
diff --git a/Build/source/utils/lcdf-typetools/configure.in b/Build/source/utils/lcdf-typetools/configure.in
index 6d26ababfc4..d2175e6ece2 100644
--- a/Build/source/utils/lcdf-typetools/configure.in
+++ b/Build/source/utils/lcdf-typetools/configure.in
@@ -1,6 +1,6 @@
dnl Process this file with autoconf to produce a configure script.
AC_INIT(NEWS)
-AM_INIT_AUTOMAKE(lcdf-typetools, 2.34)
+AM_INIT_AUTOMAKE(lcdf-typetools, 2.46)
AM_CONFIG_HEADER(config.h)
AM_MAINTAINER_MODE
@@ -110,9 +110,10 @@ AC_ARG_ENABLE(t1lint, [ --disable-t1dotlessj do not build the t1dotlessj pro
AC_ARG_ENABLE(t1lint, [ --disable-t1lint do not build the t1lint program], :, enable_t1lint=yes)
AC_ARG_ENABLE(t1reencode, [ --disable-t1reencode do not build the t1reencode program], :, enable_t1reencode=yes)
AC_ARG_ENABLE(t1testpage, [ --disable-t1testpage do not build the t1testpage program], :, enable_t1testpage=yes)
+AC_ARG_ENABLE(ttftotype42, [ --disable-ttftotype42 do not build the ttftotype42 program], :, enable_ttftotype42=yes)
SELECTED_SUBDIRS=''
-for i in cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage; do
+for i in cfftot1 mmafm mmpfb otfinfo otftotfm t1dotlessj t1lint t1reencode t1testpage ttftotype42; do
y=`eval 'echo $enable_'"$i"`
if test "x$y" != xno; then SELECTED_SUBDIRS="$SELECTED_SUBDIRS $i"; fi
done
@@ -143,6 +144,7 @@ directory. I expected it to be in $srcdir/../../texk/kpathsea.
fi
CPPFLAGS="$CPPFLAGS -I\$(top_builddir)/../../texk -I\$(top_srcdir)/../../texk"
LDFLAGS="$LDFLAGS -L\$(top_builddir)/../../texk/kpathsea/.libs"
+ AC_MSG_NOTICE([tetex build of lcdf-typetools, CPPFLAGS now: $CPPFLAGS])
elif test "x$kpathsea" != x -a "x$kpathsea" != xyes; then
CPPFLAGS="$CPPFLAGS -I$kpathsea/include"
LDFLAGS="$LDFLAGS -L$kpathsea/lib"
@@ -194,6 +196,13 @@ using --without-kpathsea.
LIBKPATHSEA='-lkpathsea'
LIBKPATHSEA_DEP=''
fi
+
+ dnl does it have opentype support?
+ if test "x$enable_tetex_build" = xyes; then
+ AC_DEFINE(HAVE_DECL_KPSE_OPENTYPE_FORMAT)
+ else
+ AC_CHECK_DECLS(kpse_opentype_format, :, :, [#include <kpathsea/kpathsea.h>])
+ fi
fi
AC_SUBST([KPSEINTERFACE_O])
AC_SUBST([LIBKPATHSEA])
@@ -472,4 +481,4 @@ dnl
dnl Output
dnl
-AC_OUTPUT(Makefile liblcdf/Makefile libefont/Makefile cfftot1/Makefile mmafm/Makefile mmpfb/Makefile otfinfo/Makefile otftotfm/Makefile t1dotlessj/Makefile t1lint/Makefile t1reencode/Makefile t1testpage/Makefile)
+AC_OUTPUT(Makefile liblcdf/Makefile libefont/Makefile cfftot1/Makefile mmafm/Makefile mmpfb/Makefile otfinfo/Makefile otftotfm/Makefile t1dotlessj/Makefile t1lint/Makefile t1reencode/Makefile t1testpage/Makefile ttftotype42/Makefile)
diff --git a/Build/source/utils/lcdf-typetools/depcomp b/Build/source/utils/lcdf-typetools/depcomp
index 11e2d3bfe1c..04701da536f 100644
--- a/Build/source/utils/lcdf-typetools/depcomp
+++ b/Build/source/utils/lcdf-typetools/depcomp
@@ -1,9 +1,9 @@
#! /bin/sh
# depcomp - compile a program generating dependencies as side-effects
-scriptversion=2004-05-31.23
+scriptversion=2005-07-09.11
-# Copyright (C) 1999, 2000, 2003, 2004 Free Software Foundation, Inc.
+# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -17,8 +17,8 @@ scriptversion=2004-05-31.23
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -50,11 +50,11 @@ Environment variables:
Report bugs to <bug-automake@gnu.org>.
EOF
- exit 0
+ exit $?
;;
-v | --v*)
echo "depcomp $scriptversion"
- exit 0
+ exit $?
;;
esac
@@ -287,36 +287,43 @@ tru64)
base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
if test "$libtool" = yes; then
- # Dependencies are output in .lo.d with libtool 1.4.
- # With libtool 1.5 they are output both in $dir.libs/$base.o.d
- # and in $dir.libs/$base.o.d and $dir$base.o.d. We process the
- # latter, because the former will be cleaned when $dir.libs is
- # erased.
- tmpdepfile1="$dir.libs/$base.lo.d"
- tmpdepfile2="$dir$base.o.d"
- tmpdepfile3="$dir.libs/$base.d"
+ # With Tru64 cc, shared objects can also be used to make a
+ # static library. This mecanism is used in libtool 1.4 series to
+ # handle both shared and static libraries in a single compilation.
+ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
+ #
+ # With libtool 1.5 this exception was removed, and libtool now
+ # generates 2 separate objects for the 2 libraries. These two
+ # compilations output dependencies in in $dir.libs/$base.o.d and
+ # in $dir$base.o.d. We have to check for both files, because
+ # one of the two compilations can be disabled. We should prefer
+ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+ # automatically cleaned when .libs/ is deleted, while ignoring
+ # the former would cause a distcleancheck panic.
+ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
+ tmpdepfile2=$dir$base.o.d # libtool 1.5
+ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
+ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
"$@" -Wc,-MD
else
- tmpdepfile1="$dir$base.o.d"
- tmpdepfile2="$dir$base.d"
- tmpdepfile3="$dir$base.d"
+ tmpdepfile1=$dir$base.o.d
+ tmpdepfile2=$dir$base.d
+ tmpdepfile3=$dir$base.d
+ tmpdepfile4=$dir$base.d
"$@" -MD
fi
stat=$?
if test $stat -eq 0; then :
else
- rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
exit $stat
fi
- if test -f "$tmpdepfile1"; then
- tmpdepfile="$tmpdepfile1"
- elif test -f "$tmpdepfile2"; then
- tmpdepfile="$tmpdepfile2"
- else
- tmpdepfile="$tmpdepfile3"
- fi
+ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
+ do
+ test -f "$tmpdepfile" && break
+ done
if test -f "$tmpdepfile"; then
sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
# That's a tab and a space in the [].
@@ -460,7 +467,8 @@ cpp)
done
"$@" -E |
- sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
sed '$ s: \\$::' > "$tmpdepfile"
rm -f "$depfile"
echo "$object : \\" > "$depfile"
diff --git a/Build/source/utils/lcdf-typetools/glyphlist.txt b/Build/source/utils/lcdf-typetools/glyphlist.txt
index f08445afd70..a1a22702a8e 100644
--- a/Build/source/utils/lcdf-typetools/glyphlist.txt
+++ b/Build/source/utils/lcdf-typetools/glyphlist.txt
@@ -1,9 +1,3 @@
-# lcdf-typetools glyphlist.txt, Version 2.33
-# Contents: The Adobe Glyph List, followed by extensions for TeX fonts and
-# encodings. We also extend the second field so that it can contain
-# multiple Unicode scalar values, separated by semicolons, analogous to
-# otftotfm's "% UNICODING" comments.
-###############################################################################
# Name: Adobe Glyph List
# Table version: 2.0
# Date: September 20, 2002
@@ -4295,129 +4289,3 @@ zstroke;01B6
zuhiragana;305A
zukatakana;30BA
#--end
-###############################################################################
-# TeX extensions
-Delta;2206;0394
-Ifractur;2111
-# FFsmall, FFIsmall, FFLsmall, FIsmall, FLsmall: invalid Unicode
-FFsmall;D804
-FFIsmall;D807
-FFLsmall;D808
-FIsmall;D805
-FLsmall;D806
-# Germandbls: invalid Unicode, used for secondary replacement from EC.enc
-Germandbls;D800
-# Germandblssmall: invalid Unicode
-Germandblssmall;D803
-Ng;014A
-Omega;2126;03A9
-Rfractur;211C
-# SS: invalid Unicode, used for secondary replacement from EC.enc
-SS;D800
-# SSsmall: invalid Unicode
-SSsmall;D803
-# altselector: invalid Unicode
-altselector;D802
-angbracketleft;27E8;2329
-angbracketright;27E9;232A
-arrowbothv;2195
-arrowdblbothv;21D5
-arrowleftbothalf;21BD
-arrowlefttophalf;21BC
-arrownortheast;2197
-arrownorthwest;2196
-arrowrightbothalf;21C1
-arrowrighttophalf;21C0
-arrowsoutheast;2198
-arrowsouthwest;2199
-# ascendercompwordmark: taller cwm, invalid Unicode
-ascendercompwordmark;D80A
-asteriskcentered;2217
-bardbl;2225
-# capitalcompwordmark: taller cwm, invalid Unicode
-capitalcompwordmark;D809
-ceilingleft;2308
-ceilingright;2309
-circlecopyrt;20DD;25CB
-circledivide;2298
-circledot;2299
-circleminus;2296
-coproduct;2A3F
-# cwm: Unicode for ZWNJ, used for secondary replacement from EC.enc
-cwm;200C
-dblbracketleft;27E6
-dblbracketright;27E7
-diamond;2662;2666
-diamondmath;22C4
-# 0237 is the proposed allocation for dotless j as of Unicode 4.0
-dotlessj;0237;F6BE
-emptyset;2205;F638
-# emptyslot: invalid Unicode; the user explicitly wants this slot empty
-emptyslot;D801
-epsilon1;03F5
-equivasymptotic;224D
-flat;266D
-floorleft;230A
-floorright;230B
-follows;227B
-followsequal;227D
-greatermuch;226B
-heart;2661;2665
-interrobang;203D
-# interrobangdown: inverted interrobang, invalid Unicode
-interrobangdown;D80B
-intersectionsq;2293
-latticetop;22A4
-lessmuch;226A
-lscript;2113
-natural;266E
-negationslash;0338
-ng;014B
-owner;220B
-pertenthousand;2031
-# TeX encodings such as 'texmital.enc' disagree with Unicode and the Adobe
-# glyph list; in TeX, the "straight" form of phi takes the name "phi",
-# whereas the more-common "loopy" form of phi, \varphi, takes the name "phi1".
-phi;03D5;03C6
-phi1;03C6
-pi1;03D6
-precedesequal;227C
-prime;2032;02B9
-rho1;03F1
-sharp;266F
-similarequal;2243
-slurabove;2322
-slurbelow;2323
-star;22C6
-subsetsqequal;2291
-supersetsqequal;2292
-triangle;25B3
-triangleinv;25BD
-triangleleft;25B9
-triangleright;25C3
-turnstileleft;22A2
-turnstileright;22A3
-# twelveudash: 2/3-em dash; invalid Unicode
-twelveudash;D80C
-unionmulti;228E
-unionsq;2294
-vector;20D7
-# visualspace: Unicode for OPEN BOX, used for secondary replacement from EC.enc
-visualspace;2423
-wreathproduct;2240
-# -- Marco Kuhlmann reported annoying glyph neologisms in fontinst encodings
-# Dbar = Dcroat
-Dbar;0110
-# compwordmark = cwm
-compwordmark;200C
-# dbar = dcroat
-dbar;0111
-# rangedash = endash
-rangedash;2013
-# hyphenchar = hyphen
-hyphenchar;002D
-# punctdash = emdash
-punctdash;2014
-# visiblespace = visualspace
-visiblespace;2423
-# -- end TeX extensions
diff --git a/Build/source/utils/lcdf-typetools/include/efont/otf.hh b/Build/source/utils/lcdf-typetools/include/efont/otf.hh
index 2e4185d023e..0333e70e3f5 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/otf.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/otf.hh
@@ -4,6 +4,8 @@
#include <efont/otfdata.hh>
class ErrorHandler;
namespace Efont { namespace OpenType {
+class Post;
+class Name;
typedef int Glyph; // 16-bit integer
@@ -42,23 +44,29 @@ class Font { public:
// default destructor
bool ok() const { return _error >= 0; }
+ bool check_checksums(ErrorHandler * = 0) const;
int error() const { return _error; }
const String& data_string() const { return _str; }
const uint8_t* data() const { return _str.udata(); }
int length() const { return _str.length(); }
- String table(Tag) const;
int ntables() const;
+ String table(Tag) const;
+ uint32_t table_checksum(Tag) const;
Tag table_tag(int) const;
+ static uint32_t checksum(const uint8_t *, const uint8_t *);
+ static uint32_t checksum(const String &);
+ static Font make(bool truetype, const Vector<Tag>& tags, const Vector<String>& data);
+
+ enum { HEADER_SIZE = 12, TABLE_DIR_ENTRY_SIZE = 16 };
+
private:
String _str;
int _error;
- enum { HEADER_SIZE = 12, TABLE_DIR_ENTRY_SIZE = 16 };
-
int parse_header(ErrorHandler*);
};
@@ -101,6 +109,7 @@ class FeatureList { public:
Tag tag(int fid) const;
String params(int fid, int length, ErrorHandler* = 0, bool old_style_offset = false) const;
+ String size_params(int fid, const Name& name, ErrorHandler* = 0) const;
int lookups(int fid, Vector<int>& results, ErrorHandler* = 0, bool clear_results = true) const;
int find(Tag, const Vector<int>& fids) const;
@@ -111,7 +120,7 @@ class FeatureList { public:
int lookups(const Vector<int>& required_fids, const Vector<int>& fids, const Vector<Tag>& sorted_ftags, Vector<int>& results, ErrorHandler* = 0) const;
int lookups(int required_fid, const Vector<int>& fids, const Vector<Tag>& sorted_ftags, Vector<int>& results, ErrorHandler* = 0) const;
int lookups(const ScriptList&, Tag script, Tag langsys, const Vector<Tag>& sorted_ftags, Vector<int>& results, ErrorHandler* = 0) const;
-
+
private:
enum { FEATURELIST_HEADERSIZE = 2, FEATURE_RECSIZE = 6,
diff --git a/Build/source/utils/lcdf-typetools/include/efont/otfcmap.hh b/Build/source/utils/lcdf-typetools/include/efont/otfcmap.hh
index 9662e7d0a5f..7f732364bff 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/otfcmap.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/otfcmap.hh
@@ -15,6 +15,7 @@ class Cmap { public:
inline Glyph map_uni(uint32_t c) const;
int map_uni(const Vector<uint32_t> &in, Vector<Glyph> &out) const;
+ inline void unmap_all(Vector<uint32_t> &g2c) const;
private:
@@ -34,7 +35,7 @@ class Cmap { public:
int first_table(int platform, int encoding) const;
int check_table(int t, ErrorHandler * = 0) const;
Glyph map_table(int t, uint32_t, ErrorHandler * = 0) const;
- void dump_table(int t, Vector<uint32_t> &cs, Vector<uint32_t> &gs, ErrorHandler * = 0) const;
+ void dump_table(int t, Vector<uint32_t> &g2c, ErrorHandler * = 0) const;
};
@@ -44,5 +45,10 @@ inline Glyph Cmap::map_uni(uint32_t c) const
return map_table(first_unicode_table(), c, ErrorHandler::default_handler());
}
+inline void Cmap::unmap_all(Vector<uint32_t> &g2c) const
+{
+ dump_table(first_unicode_table(), g2c, ErrorHandler::default_handler());
+}
+
}}
#endif
diff --git a/Build/source/utils/lcdf-typetools/include/efont/otfdata.hh b/Build/source/utils/lcdf-typetools/include/efont/otfdata.hh
index 638e7913148..b8df8b6dcbf 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/otfdata.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/otfdata.hh
@@ -56,6 +56,8 @@ class Data { public:
operator const String&() const { return _str; }
+ operator bool() const { return _str; }
+ const uint8_t *udata() const { return _str.udata(); }
int length() const { return _str.length(); }
inline uint8_t operator[](unsigned offset) const throw (Bounds);
@@ -66,6 +68,9 @@ class Data { public:
Data subtable(unsigned offset) const throw (Bounds);
Data offset_subtable(unsigned offset_offset) const throw (Bounds);
+ inline Data substring(int left, int len = -1) const throw ();
+
+ void align_long() { _str.align(4); }
private:
@@ -115,5 +120,11 @@ inline int32_t Data::s32(unsigned offset) const throw (Bounds)
| ntohs(*reinterpret_cast<const uint16_t *>(_str.data() + offset + 2));
}
+inline Data
+Data::substring(int left, int len) const throw ()
+{
+ return Data(_str.substring(left, len));
+}
+
}}
#endif
diff --git a/Build/source/utils/lcdf-typetools/include/efont/otfgpos.hh b/Build/source/utils/lcdf-typetools/include/efont/otfgpos.hh
index 5c83cb992c1..6843370ac5b 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/otfgpos.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/otfgpos.hh
@@ -32,7 +32,7 @@ class GposLookup { public:
GposLookup(const Data &) throw (Error);
int type() const { return _d.u16(0); }
uint16_t flags() const { return _d.u16(2); }
- bool unparse_automatics(Vector<Positioning> &) const;
+ bool unparse_automatics(Vector<Positioning> &, ErrorHandler * = 0) const;
enum {
HEADERSIZE = 6, RECSIZE = 2,
L_SINGLE = 1, L_PAIR = 2, L_CURSIVE = 3, L_MARKTOBASE = 4,
diff --git a/Build/source/utils/lcdf-typetools/include/efont/otfname.hh b/Build/source/utils/lcdf-typetools/include/efont/otfname.hh
index 2e18d0c7d41..5fb82fa1788 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/otfname.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/otfname.hh
@@ -34,6 +34,10 @@ class Name { public:
inline const_iterator begin() const;
inline const_iterator end() const;
String name(const_iterator) const;
+ String english_name(int nameid) const;
+
+ // check version string for backwards compatibility
+ bool version_chaincontext_reverse_backtrack() const;
struct PlatformPred {
inline PlatformPred(int nameid, int platform = -1, int encoding = -1, int language = -1);
diff --git a/Build/source/utils/lcdf-typetools/include/efont/otfpost.hh b/Build/source/utils/lcdf-typetools/include/efont/otfpost.hh
new file mode 100644
index 00000000000..4d7ff64146c
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/include/efont/otfpost.hh
@@ -0,0 +1,62 @@
+// -*- related-file-name: "../../libefont/otfpost.cc" -*-
+#ifndef EFONT_OTFPOST_HH
+#define EFONT_OTFPOST_HH
+#include <efont/otfdata.hh>
+#include <lcdf/error.hh>
+namespace Efont { namespace OpenType {
+
+class Post { public:
+
+ Post(const String &, ErrorHandler * = 0);
+ // default destructor
+
+ bool ok() const { return _error >= 0; }
+ int error() const { return _error; }
+
+ double italic_angle() const;
+ bool is_fixed_pitch() const;
+ inline int underline_position() const;
+ inline int underline_thickness() const;
+ inline uint32_t mem_type42(bool ismax) const;
+ int nglyphs() const { return _nglyphs; }
+ bool glyph_names(Vector<PermString> &gnames) const;
+
+ private:
+
+ Data _str;
+ int _error;
+ uint32_t _version;
+ int _nglyphs;
+ Vector<int> _extend_glyph_names;
+
+ enum { HEADER_SIZE = 32, N_MAC_GLYPHS = 258 };
+ int parse_header(ErrorHandler *);
+
+};
+
+inline int
+Post::underline_position() const
+{
+ // NB: "This is the suggested distance of the top of the underline from
+ // the baseline (negative values indicate below baseline). The PostScript
+ // definition of this FontInfo dictionary key (the y coordinate of the
+ // center of the stroke) is not used for historical reasons. The value of
+ // the PostScript key may be calculated by subtracting half the
+ // underlineThickness from the value of this field." -- OpenType spec
+ return ok() ? _str.s16(8) : 0;
+}
+
+inline int
+Post::underline_thickness() const
+{
+ return ok() ? _str.s16(10) : 0;
+}
+
+inline uint32_t
+Post::mem_type42(bool ismax) const
+{
+ return ok() ? _str.u32(ismax ? 20 : 16) : 0;
+}
+
+}}
+#endif
diff --git a/Build/source/utils/lcdf-typetools/include/efont/pairop.hh b/Build/source/utils/lcdf-typetools/include/efont/pairop.hh
index bd37f27d56e..c445f16624a 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/pairop.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/pairop.hh
@@ -94,7 +94,7 @@ class PairProgram { public:
inline PairOp::PairOp(GlyphIndex l, GlyphIndex r, int v, PairOpIndex nl)
- : _left(l), _right(r), _val(v), _next_left(nl)
+ : _left(l), _right(r), _result(), _val(v), _next_left(nl)
{
}
diff --git a/Build/source/utils/lcdf-typetools/include/efont/t1cs.hh b/Build/source/utils/lcdf-typetools/include/efont/t1cs.hh
index 63d7236b898..41e27b77d72 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/t1cs.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/t1cs.hh
@@ -252,7 +252,7 @@ enum Type1Defs {
inline Type1Charstring::Type1Charstring(const String &s)
- : _s(s), _key(-1)
+ : Charstring(), _s(s), _key(-1)
{
}
diff --git a/Build/source/utils/lcdf-typetools/include/efont/t1csgen.hh b/Build/source/utils/lcdf-typetools/include/efont/t1csgen.hh
index af8c16a7080..c03684fba42 100644
--- a/Build/source/utils/lcdf-typetools/include/efont/t1csgen.hh
+++ b/Build/source/utils/lcdf-typetools/include/efont/t1csgen.hh
@@ -16,7 +16,7 @@ class Type1CharstringGen { public:
char *data() const { return _ncs.data(); }
int length() const { return _ncs.length(); }
- void gen_number(double, int = 0);
+ void gen_number(double, int kind = 0);
void gen_command(int);
void gen_stack(CharstringInterp &, int for_cmd);
diff --git a/Build/source/utils/lcdf-typetools/include/efont/ttfcs.hh b/Build/source/utils/lcdf-typetools/include/efont/ttfcs.hh
new file mode 100644
index 00000000000..81dbd5682f2
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/include/efont/ttfcs.hh
@@ -0,0 +1,39 @@
+// -*- related-file-name: "../../libefont/ttfcs.cc" -*-
+#ifndef EFONT_TTFCS_HH
+#define EFONT_TTFCS_HH
+#include <efont/t1cs.hh>
+#include <efont/otf.hh>
+#include <efont/otfdata.hh>
+namespace Efont {
+
+class TrueTypeBoundsCharstringProgram : public CharstringProgram { public:
+
+ TrueTypeBoundsCharstringProgram(const OpenType::Font *);
+ ~TrueTypeBoundsCharstringProgram();
+
+ int nglyphs() const;
+ Charstring *glyph(int gi) const;
+ PermString glyph_name(int gi) const;
+ void glyph_names(Vector<PermString> &) const;
+
+ private:
+
+ const OpenType::Font *_otf;
+ int _nglyphs;
+ int _nhmtx;
+ bool _loca_long;
+ double _em_xform;
+ OpenType::Data _loca;
+ OpenType::Data _glyf;
+ OpenType::Data _hmtx;
+ mutable Vector<Charstring *> _charstrings;
+ mutable Vector<PermString> _glyph_names;
+ mutable bool _got_glyph_names;
+ mutable Vector<uint32_t> _unicodes;
+ mutable bool _got_unicodes;
+
+};
+
+}
+#endif
+
diff --git a/Build/source/utils/lcdf-typetools/include/lcdf/error.hh b/Build/source/utils/lcdf-typetools/include/lcdf/error.hh
index 790c8273763..8d38cbfb87a 100644
--- a/Build/source/utils/lcdf-typetools/include/lcdf/error.hh
+++ b/Build/source/utils/lcdf-typetools/include/lcdf/error.hh
@@ -50,7 +50,7 @@ class ErrorHandler { public:
static void static_cleanup();
static ErrorHandler *default_handler();
- static ErrorHandler *silent_handler();
+ static ErrorHandler *ignore_handler();
static bool has_default_handler();
static void set_default_handler(ErrorHandler *);
@@ -124,6 +124,11 @@ class FileErrorHandler : public BaseErrorHandler { public:
};
#endif
+class SilentErrorHandler : public BaseErrorHandler { public:
+ SilentErrorHandler() { }
+ void handle_text(Seriousness, const String &);
+};
+
class ErrorVeneer : public ErrorHandler { public:
ErrorVeneer(ErrorHandler *errh) : _errh(errh) { }
diff --git a/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.cc b/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.cc
index d43e1344668..17cec16e0d5 100644
--- a/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.cc
+++ b/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.cc
@@ -121,13 +121,13 @@ HashMap<K, V>::insert(const K &key, const V &val)
template <class K, class V>
V &
-HashMap<K, V>::find_force(const K &key)
+HashMap<K, V>::find_force(const K &key, const V &value)
{
check_capacity();
int i = bucket(key);
if (!(bool)_e[i].key) {
_e[i].key = key;
- _e[i].value = _default_value;
+ _e[i].value = value;
_n++;
}
return _e[i].value;
diff --git a/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.hh b/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.hh
index c1f1339b976..10b5c321177 100644
--- a/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.hh
+++ b/Build/source/utils/lcdf-typetools/include/lcdf/hashmap.hh
@@ -19,6 +19,30 @@
template <class K, class V> class _HashMap_const_iterator;
template <class K, class V> class _HashMap_iterator;
+inline unsigned
+hashcode(int i)
+{
+ return static_cast<unsigned>(i);
+}
+
+inline unsigned
+hashcode(unsigned u)
+{
+ return u;
+}
+
+inline unsigned
+hashcode(long l)
+{
+ return static_cast<unsigned>(l);
+}
+
+inline unsigned
+hashcode(unsigned long ul)
+{
+ return static_cast<unsigned long>(ul);
+}
+
template <class K, class V>
class HashMap { public:
@@ -43,7 +67,8 @@ class HashMap { public:
inline const V &find(const K &) const;
inline V *findp(const K &) const;
inline const V &operator[](const K &k) const;
- V &find_force(const K &);
+ V &find_force(const K &, const V &);
+ inline V &find_force(const K &);
bool insert(const K &, const V &);
void clear();
@@ -154,6 +179,13 @@ HashMap<K, V>::findp(const K &key) const
}
template <class K, class V>
+inline V &
+HashMap<K, V>::find_force(const K &key)
+{
+ return find_force(key, _default_value);
+}
+
+template <class K, class V>
inline _HashMap_const_iterator<K, V>
HashMap<K, V>::begin() const
{
@@ -195,29 +227,5 @@ _HashMap_const_iterator<K, V>::operator!=(const const_iterator &i) const
return _hm != i._hm || _pos != i._pos;
}
-inline unsigned
-hashcode(int i)
-{
- return static_cast<unsigned>(i);
-}
-
-inline unsigned
-hashcode(unsigned u)
-{
- return u;
-}
-
-inline unsigned
-hashcode(long l)
-{
- return static_cast<unsigned>(l);
-}
-
-inline unsigned
-hashcode(unsigned long ul)
-{
- return static_cast<unsigned long>(ul);
-}
-
#include <lcdf/hashmap.cc> // necessary to support GCC 3.3
#endif
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/md5.h b/Build/source/utils/lcdf-typetools/include/lcdf/md5.h
index 228c45f615c..7d7f8641d23 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/md5.h
+++ b/Build/source/utils/lcdf-typetools/include/lcdf/md5.h
@@ -1,4 +1,5 @@
-/* md5.h - MD5 Message-Digest Algorithm
+/* -*- related-file-name: "../../liblcdf/md5.c" -*-
+ * md5.h - MD5 Message-Digest Algorithm
* Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
*
* according to the definition of MD5 in RFC 1321 from April 1992.
@@ -19,8 +20,8 @@
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-#ifndef _MD5_HDR_
-#define _MD5_HDR_
+#ifndef LCDF_MD5_H
+#define LCDF_MD5_H
#ifdef __cplusplus
extern "C" {
#endif
@@ -44,5 +45,4 @@ void md5_final_text(char *text_digest, MD5_CONTEXT *ctx);
#ifdef __cplusplus
}
#endif
-#endif /* _MD5_HDR_ */
-
+#endif /* LCDF_MD5_H */
diff --git a/Build/source/utils/lcdf-typetools/install-sh b/Build/source/utils/lcdf-typetools/install-sh
index dd97db7aa1c..4d4a9519eaf 100755
--- a/Build/source/utils/lcdf-typetools/install-sh
+++ b/Build/source/utils/lcdf-typetools/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-scriptversion=2004-09-10.20
+scriptversion=2005-05-14.22
# This originates from X11R5 (mit/util/scripts/install.sh), which was
# later released in X11R6 (xc/config/util/install.sh) with the
@@ -109,7 +109,7 @@ while test -n "$1"; do
shift
continue;;
- --help) echo "$usage"; exit 0;;
+ --help) echo "$usage"; exit $?;;
-m) chmodcmd="$chmodprog $2"
shift
@@ -134,7 +134,7 @@ while test -n "$1"; do
shift
continue;;
- --version) echo "$0 $scriptversion"; exit 0;;
+ --version) echo "$0 $scriptversion"; exit $?;;
*) # When -d is used, all remaining arguments are directories to create.
# When -t is used, the destination is already specified.
@@ -213,7 +213,7 @@ do
fi
# This sed command emulates the dirname command.
- dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+ dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
# Make sure that the destination directory exists.
@@ -226,7 +226,8 @@ do
oIFS=$IFS
# Some sh's can't handle IFS=/ for some reason.
IFS='%'
- set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+ shift
IFS=$oIFS
pathcomp=
@@ -295,7 +296,7 @@ do
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|| {
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
- (exit 1); exit
+ (exit 1); exit 1
}
else
:
@@ -306,12 +307,12 @@ do
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
}
}
- fi || { (exit 1); exit; }
+ fi || { (exit 1); exit 1; }
done
# The final little trick to "correctly" pass the exit status to the exit trap.
{
- (exit 0); exit
+ (exit 0); exit 0
}
# Local variables:
diff --git a/Build/source/utils/lcdf-typetools/lcdf-typetools.spec b/Build/source/utils/lcdf-typetools/lcdf-typetools.spec
index 7224140fbc5..b3f2c2ae824 100644
--- a/Build/source/utils/lcdf-typetools/lcdf-typetools.spec
+++ b/Build/source/utils/lcdf-typetools/lcdf-typetools.spec
@@ -1,6 +1,6 @@
Summary: Programs to manipulate OpenType and multiple-master fonts
Name: lcdf-typetools
-Version: 2.16
+Version: 2.40
Release: hmcmath.1
Copyright: GPL
Vendor: Little Cambridgeport Design Factory <http://www.lcdf.org/>
@@ -21,13 +21,16 @@ This package contains four tools for working with OpenType fonts:
optical size option
otftotfm allows you to create TeX font metrics and encodings for
- using PostScript-flavored OpenType fonts
+ using OpenType fonts
t1dotlessj creates a Type 1 font with a single character --
the dotless j corresponding to the specified design
t1lint checks a Type 1 font for correctness (preliminary)
+ t1reencode reencodes a Type 1 font, replacing its internal encoding with
+ one you specify
+
t1testpage creates a PostScript test page for a specified
font file (preliminary)
@@ -79,6 +82,7 @@ make DESTDIR=$RPM_BUILD_ROOT install
%{_bindir}/otftotfm
%{_bindir}/t1dotlessj
%{_bindir}/t1lint
+%{_bindir}/t1reencode
%{_bindir}/t1testpage
%{_mandir}/man*/*
%{_datadir}/lcdf-typetools/*
diff --git a/Build/source/utils/lcdf-typetools/libefont/Makefile.am b/Build/source/utils/lcdf-typetools/libefont/Makefile.am
index feeb45d2c78..a230ef7d44d 100644
--- a/Build/source/utils/lcdf-typetools/libefont/Makefile.am
+++ b/Build/source/utils/lcdf-typetools/libefont/Makefile.am
@@ -20,6 +20,7 @@ libefont_a_SOURCES = \
otfgsub.cc \
otfname.cc \
otfos2.cc \
+ otfpost.cc \
pairop.cc \
psres.cc \
t1bounds.cc \
@@ -31,7 +32,8 @@ libefont_a_SOURCES = \
t1fontskel.cc \
t1mm.cc \
t1rw.cc \
- t1unparser.cc
+ t1unparser.cc \
+ ttfcs.cc
libefont_a_LIBADD = @TEMPLATE_OBJS@
CLEANFILES = @TEMPLATE_OBJS@
diff --git a/Build/source/utils/lcdf-typetools/libefont/Makefile.in b/Build/source/utils/lcdf-typetools/libefont/Makefile.in
index 11e85d5400a..5f71a78f767 100644
--- a/Build/source/utils/lcdf-typetools/libefont/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/libefont/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(libefont_a_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -55,11 +53,11 @@ am_libefont_a_OBJECTS = afm.$(OBJEXT) afmparse.$(OBJEXT) \
findmet.$(OBJEXT) metrics.$(OBJEXT) otf.$(OBJEXT) \
otfcmap.$(OBJEXT) otfdata.$(OBJEXT) otfdescrip.$(OBJEXT) \
otfgpos.$(OBJEXT) otfgsub.$(OBJEXT) otfname.$(OBJEXT) \
- otfos2.$(OBJEXT) pairop.$(OBJEXT) psres.$(OBJEXT) \
- t1bounds.$(OBJEXT) t1cs.$(OBJEXT) t1csgen.$(OBJEXT) \
- t1interp.$(OBJEXT) t1item.$(OBJEXT) t1font.$(OBJEXT) \
- t1fontskel.$(OBJEXT) t1mm.$(OBJEXT) t1rw.$(OBJEXT) \
- t1unparser.$(OBJEXT)
+ otfos2.$(OBJEXT) otfpost.$(OBJEXT) pairop.$(OBJEXT) \
+ psres.$(OBJEXT) t1bounds.$(OBJEXT) t1cs.$(OBJEXT) \
+ t1csgen.$(OBJEXT) t1interp.$(OBJEXT) t1item.$(OBJEXT) \
+ t1font.$(OBJEXT) t1fontskel.$(OBJEXT) t1mm.$(OBJEXT) \
+ t1rw.$(OBJEXT) t1unparser.$(OBJEXT) ttfcs.$(OBJEXT)
libefont_a_OBJECTS = $(am_libefont_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -182,6 +180,7 @@ libefont_a_SOURCES = \
otfgsub.cc \
otfname.cc \
otfos2.cc \
+ otfpost.cc \
pairop.cc \
psres.cc \
t1bounds.cc \
@@ -193,7 +192,8 @@ libefont_a_SOURCES = \
t1fontskel.cc \
t1mm.cc \
t1rw.cc \
- t1unparser.cc
+ t1unparser.cc \
+ ttfcs.cc
libefont_a_LIBADD = @TEMPLATE_OBJS@
CLEANFILES = @TEMPLATE_OBJS@
@@ -261,6 +261,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otfgsub.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otfname.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otfos2.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otfpost.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pairop.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psres.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1bounds.Po@am__quote@
@@ -273,6 +274,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1mm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1rw.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t1unparser.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttfcs.Po@am__quote@
.cc.o:
@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
diff --git a/Build/source/utils/lcdf-typetools/libefont/afm.cc b/Build/source/utils/lcdf-typetools/libefont/afm.cc
index 2d879aa7c2d..1f61044ebc0 100644
--- a/Build/source/utils/lcdf-typetools/libefont/afm.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/afm.cc
@@ -2,7 +2,7 @@
/* afm.{cc,hh} -- Adobe Font Metrics files
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
@@ -29,7 +29,7 @@ AfmReader::AfmReader(AfmParser &parser, Metrics *afm, AfmMetricsXt *afm_xt,
: _afm(afm), _afm_xt(afm_xt), _l(parser),
_composite_warned(false), _metrics_sets_warned(false), _y_width_warned(0)
{
- _errh = errh ? errh : ErrorHandler::silent_handler();
+ _errh = errh ? errh : ErrorHandler::ignore_handler();
}
Metrics *
diff --git a/Build/source/utils/lcdf-typetools/libefont/afmparse.cc b/Build/source/utils/lcdf-typetools/libefont/afmparse.cc
index b52747d5e62..e7e103eef12 100644
--- a/Build/source/utils/lcdf-typetools/libefont/afmparse.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/afmparse.cc
@@ -2,7 +2,7 @@
/* afmparse.{cc,hh} -- Adobe Font Metrics parsing
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
@@ -218,22 +218,22 @@ AfmParser::vis(const char *formatsigned, va_list valist)
case 'd':
case 'i': {
- unsigned char *new_str;
- int v = strtol((char *)str, (char **)&new_str, 10);
- if (new_str == str) FAIL("should be an integer");
+ union { unsigned char *uc; char *c; } new_str;
+ int v = strtol((char *)str, &new_str.c, 10);
+ if (new_str.uc == str) FAIL("should be an integer");
- str = new_str;
+ str = new_str.uc;
int *istore = va_arg(valist, int *);
if (istore) *istore = v;
break;
}
case 'x': {
- unsigned char *new_str;
- int v = strtol((char *)str, (char **)&new_str, 16);
- if (new_str == str) FAIL("should be a hex integer");
+ union { unsigned char *uc; char *c; } new_str;
+ int v = strtol((char *)str, &new_str.c, 16);
+ if (new_str.uc == str) FAIL("should be a hex integer");
- str = new_str;
+ str = new_str.uc;
int *istore = va_arg(valist, int *);
if (istore) *istore = v;
break;
@@ -242,12 +242,12 @@ AfmParser::vis(const char *formatsigned, va_list valist)
case 'e':
case 'f':
case 'g': {
- unsigned char *new_str;
- double v = strtonumber((char *)str, (char **)&new_str);
+ union { unsigned char *uc; char *c; } new_str;
+ double v = strtonumber((char *)str, &new_str.c);
if (v < MIN_KNOWN_DOUBLE) v = MIN_KNOWN_DOUBLE;
- if (new_str == str) FAIL("should be a real number");
+ if (new_str.uc == str) FAIL("should be a real number");
- str = new_str;
+ str = new_str.uc;
double *dstore = va_arg(valist, double *);
if (dstore) *dstore = v;
break;
diff --git a/Build/source/utils/lcdf-typetools/libefont/afmw.cc b/Build/source/utils/lcdf-typetools/libefont/afmw.cc
index 3664d3e83ce..6044b001551 100644
--- a/Build/source/utils/lcdf-typetools/libefont/afmw.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/afmw.cc
@@ -2,7 +2,7 @@
/* afmw.{cc,hh} -- Adobe Font Metrics writing
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/amfm.cc b/Build/source/utils/lcdf-typetools/libefont/amfm.cc
index e7d3a32a5b2..6d2346b35d3 100644
--- a/Build/source/utils/lcdf-typetools/libefont/amfm.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/amfm.cc
@@ -2,7 +2,7 @@
/* amfm.{cc,hh} -- Adobe Multiple-Master Font Metrics
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
@@ -246,7 +246,7 @@ AmfmReader::AmfmReader(AfmParser &afmp, AmfmMetrics *amfm, ErrorHandler *errh)
: _amfm(amfm), _finder(amfm->_finder), _l(afmp),
_mmspace(amfm->_mmspace)
{
- _errh = errh ? errh : ErrorHandler::silent_handler();
+ _errh = errh ? errh : ErrorHandler::ignore_handler();
}
AmfmMetrics *
diff --git a/Build/source/utils/lcdf-typetools/libefont/cff.cc b/Build/source/utils/lcdf-typetools/libefont/cff.cc
index 3a42a84e2c7..d54bb091606 100644
--- a/Build/source/utils/lcdf-typetools/libefont/cff.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/cff.cc
@@ -2,7 +2,7 @@
/* cff.{cc,hh} -- Compact Font Format fonts
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
@@ -346,7 +346,7 @@ Cff::Cff(const String &s, ErrorHandler *errh)
static_assert((sizeof(standard_strings) / sizeof(standard_strings[0])) == NSTANDARD_STRINGS);
static_assert((sizeof(standard_encoding) / sizeof(standard_encoding[0])) == 256);
static_assert((sizeof(expert_encoding) / sizeof(expert_encoding[0])) == 256);
- _error = parse_header(errh ? errh : ErrorHandler::silent_handler());
+ _error = parse_header(errh ? errh : ErrorHandler::ignore_handler());
}
Cff::~Cff()
@@ -366,8 +366,10 @@ Cff::parse_header(ErrorHandler *errh)
return 0;
// parse header
+ if (_len == 0)
+ return errh->error("not a PostScript-flavored OpenType font"), -EFAULT;
if (_len < HEADER_SIZE)
- return errh->error("CFF file too small for header"), -EFAULT;
+ return errh->error("CFF file too small for header (have %d, want %d)", _len, HEADER_SIZE), -EFAULT;
if (_data[0] != 1) // major version number
return errh->error("bad major version number %d", _data[0]), -ERANGE;
int hdrSize = _data[2], offSize = _data[3];
@@ -514,7 +516,7 @@ Cff::FontParent *
Cff::font(PermString font_name, ErrorHandler *errh)
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
if (!ok())
return errh->error("invalid CFF"), (FontParent *) 0;
@@ -585,7 +587,7 @@ void
Cff::Charset::assign(const Cff *cff, int pos, int nglyphs, int max_sid, ErrorHandler *errh)
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
_sids.reserve(nglyphs);
@@ -688,7 +690,7 @@ void
Cff::FDSelect::assign(const Cff *cff, int pos, int nglyphs, ErrorHandler *errh)
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
if (_my_fds)
delete[] _fds;
_fds = 0;
@@ -755,7 +757,7 @@ Cff::IndexIterator::IndexIterator(const uint8_t *data, int pos, int len, ErrorHa
: _contents(0), _offset(0), _last_offset(0)
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
// check header
int nitems = 0;
@@ -843,7 +845,7 @@ Cff::Dict::assign(Cff *cff, int pos, int dict_len, ErrorHandler *errh, const cha
_operands.clear();
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
const uint8_t *data = cff->data() + pos;
const uint8_t *end_data = data + dict_len;
@@ -984,7 +986,7 @@ int
Cff::Dict::check(bool is_private, ErrorHandler *errh, const char *dict_name) const
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
int before_nerrors = errh->nerrors();
// keep track of operator reuse
@@ -1613,7 +1615,7 @@ Cff::ChildFont::ChildFont(Cff *cff, Cff::CIDFont *parent, int charstring_type, c
: FontParent(cff), _parent(parent), _top_dict(top_dict)
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
if (!cff->ok() || !_top_dict.ok()) {
errh->error("invalid CFF");
diff --git a/Build/source/utils/lcdf-typetools/libefont/encoding.cc b/Build/source/utils/lcdf-typetools/libefont/encoding.cc
index 11ce122d027..ee71957874f 100644
--- a/Build/source/utils/lcdf-typetools/libefont/encoding.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/encoding.cc
@@ -2,7 +2,7 @@
/* encoding.{cc,hh} -- 8-bit encodings
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/findmet.cc b/Build/source/utils/lcdf-typetools/libefont/findmet.cc
index 04ed82f0b8e..d0b6ce3a5c9 100644
--- a/Build/source/utils/lcdf-typetools/libefont/findmet.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/findmet.cc
@@ -2,7 +2,7 @@
/* findmet.{cc,hh} -- find font metrics
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/metrics.cc b/Build/source/utils/lcdf-typetools/libefont/metrics.cc
index 3e2508377c8..e0b834ff9e2 100644
--- a/Build/source/utils/lcdf-typetools/libefont/metrics.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/metrics.cc
@@ -2,7 +2,7 @@
/* metrics.{cc,hh} -- generic font metrics
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/otf.cc b/Build/source/utils/lcdf-typetools/libefont/otf.cc
index 22987bee00b..6b23caf7c64 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otf.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otf.cc
@@ -2,7 +2,7 @@
/* otf.{cc,hh} -- OpenType font basics
*
- * Copyright (c) 2002-2004 Eddie Kohler
+ * Copyright (c) 2002-2006 Eddie Kohler
*
* This program 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
@@ -24,6 +24,7 @@
#include <string.h>
#include <algorithm>
#include <efont/otfdata.hh> // for ntohl()
+#include <efont/otfname.hh>
#ifndef static_assert
#define static_assert(c) switch (c) case 0: case (c):
@@ -41,7 +42,7 @@ Font::Font(const String &s, ErrorHandler *errh)
: _str(s)
{
_str.align(4);
- _error = parse_header(errh ? errh : ErrorHandler::silent_handler());
+ _error = parse_header(errh ? errh : ErrorHandler::ignore_handler());
}
int
@@ -87,6 +88,38 @@ Font::parse_header(ErrorHandler *errh)
return 0;
}
+bool
+Font::check_checksums(ErrorHandler *errh) const
+{
+ if (error() < 0)
+ return false;
+ int nt = ntables();
+ bool ok = true;
+ for (int i = 0; i < nt; i++) {
+ const uint8_t *entry = data() + HEADER_SIZE + TABLE_DIR_ENTRY_SIZE * i;
+ String tbl = _str.substring(ULONG_AT(entry + 8), ULONG_AT(entry + 12));
+ uint32_t sum = checksum(tbl);
+ if (ULONG_AT(entry) == 0x68656164 // 'head'
+ && tbl.length() >= 12)
+ sum -= ULONG_AT(tbl.data() + 8);
+ if (sum != ULONG_AT(entry + 4)) {
+ if (errh)
+ errh->error("table '%s' checksum error: %x vs. %x", Tag(ULONG_AT(entry)).text().c_str(), sum, ULONG_AT(entry + 4));
+ ok = false;
+ }
+ }
+ return ok;
+}
+
+int
+Font::ntables() const
+{
+ if (error() < 0)
+ return 0;
+ else
+ return USHORT_AT(data() + 4);
+}
+
String
Font::table(Tag tag) const
{
@@ -99,13 +132,16 @@ Font::table(Tag tag) const
return String();
}
-int
-Font::ntables() const
+uint32_t
+Font::table_checksum(Tag tag) const
{
if (error() < 0)
- return 0;
+ return String();
+ const uint8_t *entry = tag.table_entry(data() + HEADER_SIZE, USHORT_AT(data() + 4), TABLE_DIR_ENTRY_SIZE);
+ if (entry)
+ return ULONG_AT(entry + 4);
else
- return USHORT_AT(data() + 4);
+ return 0;
}
Tag
@@ -117,6 +153,111 @@ Font::table_tag(int i) const
return Tag(ULONG_AT(data() + HEADER_SIZE + TABLE_DIR_ENTRY_SIZE * i));
}
+uint32_t
+Font::checksum(const uint8_t *begin, const uint8_t *end)
+{
+ uint32_t sum = 0;
+ if (reinterpret_cast<uintptr_t>(begin) % 4)
+ for (; begin + 3 < end; begin += 4)
+ sum += (begin[0] << 24) + (begin[1] << 16) + (begin[2] << 8) + begin[3];
+ else
+ for (; begin + 3 < end; begin += 4)
+ sum += ULONG_AT(begin);
+ uint32_t leftover = 0;
+ for (int i = 0; i < 4; i++)
+ leftover = (leftover << 8) + (begin < end ? *begin++ : 0);
+ return sum + leftover;
+}
+
+uint32_t
+Font::checksum(const String &s)
+{
+ return checksum(reinterpret_cast<const uint8_t *>(s.begin()), reinterpret_cast<const uint8_t *>(s.end()));
+}
+
+namespace {
+class TagCompar { public:
+ TagCompar(const Vector<Tag> &tags) : _tags(tags) { }
+ bool operator()(int a, int b) { return _tags[a] < _tags[b]; }
+ const Vector<Tag> &_tags;
+};
+}
+
+Font
+Font::make(bool truetype, const Vector<Tag>& tags, const Vector<String>& data)
+{
+ StringAccum sa;
+
+ // create offset table
+ {
+ union {
+ uint8_t c[HEADER_SIZE];
+ uint16_t s[HEADER_SIZE / 2];
+ uint32_t l[HEADER_SIZE / 4];
+ } hdr;
+ hdr.l[0] = (truetype ? htonl(0x00010000) : htonl(0x4F54544F));
+ hdr.s[2] = htons(tags.size());
+ int entrySelector;
+ for (entrySelector = 0; (2 << entrySelector) <= tags.size(); entrySelector++)
+ /* nada */;
+ hdr.s[3] = htons((1 << entrySelector) * 16);
+ hdr.s[4] = htons(entrySelector);
+ hdr.s[5] = htons((tags.size() - (1 << entrySelector)) * 16);
+ sa.append(&hdr.c[0], HEADER_SIZE);
+ }
+
+ // sort tags
+ Vector<int> permut;
+ for (int i = 0; i < tags.size(); i++)
+ permut.push_back(i);
+ std::sort(permut.begin(), permut.end(), TagCompar(tags));
+
+ // table listing
+ uint32_t offset = HEADER_SIZE + TABLE_DIR_ENTRY_SIZE * tags.size();
+ for (int *tp = permut.begin(); tp < permut.end(); tp++) {
+ union {
+ uint8_t c[TABLE_DIR_ENTRY_SIZE];
+ uint32_t l[TABLE_DIR_ENTRY_SIZE / 4];
+ } tdir;
+ tdir.l[0] = htonl(tags[*tp].value());
+
+ // discount current checksum adjustment in head table
+ uint32_t sum = checksum(data[*tp]);
+ if (tags[*tp] == Tag("head") && data[*tp].length() >= 12) {
+ const uint8_t *x = data[*tp].udata() + 8;
+ sum -= (x[0] << 24) + (x[1] << 16) + (x[2] << 8) + x[3];
+ }
+ tdir.l[1] = htonl(sum);
+
+ tdir.l[2] = htonl(offset);
+ tdir.l[3] = htonl(data[*tp].length());
+ sa.append(&tdir.c[0], TABLE_DIR_ENTRY_SIZE);
+ offset += (data[*tp].length() + 3) & ~3;
+ }
+
+ // actual tables
+ for (int *tp = permut.begin(); tp < permut.end(); tp++) {
+ sa << data[*tp];
+ while (sa.length() % 4)
+ sa << '\0';
+ }
+
+ // fix 'head' table
+ for (int i = 0; i < tags.size(); i++) {
+ char *thdr = sa.data() + HEADER_SIZE + TABLE_DIR_ENTRY_SIZE * i;
+ if (ULONG_AT(thdr) == 0x68656164 && ULONG_AT(thdr + 12) >= 12) {
+ uint32_t offset = ULONG_AT(thdr + 8);
+ char *head = sa.data() + offset;
+ memset(head + 8, '\0', 4);
+ uint32_t allsum = checksum(reinterpret_cast<uint8_t *>(sa.data()), reinterpret_cast<uint8_t *>(sa.data() + sa.length()));
+ uint32_t *adj = reinterpret_cast<uint32_t *>(head + 8);
+ *adj = htonl(0xB1B0AFBA - allsum);
+ }
+ }
+
+ return Font(sa.take_string());
+}
+
/**************************
* Tag *
@@ -223,7 +364,7 @@ ScriptList::assign(const String &str, ErrorHandler *errh)
{
_str = str;
_str.align(4);
- int result = check_header(errh ? errh : ErrorHandler::silent_handler());
+ int result = check_header(errh ? errh : ErrorHandler::ignore_handler());
if (result < 0)
_str = String();
return result;
@@ -368,7 +509,7 @@ FeatureList::assign(const String &str, ErrorHandler *errh)
{
_str = str;
_str.align(2);
- int result = check_header(errh ? errh : ErrorHandler::silent_handler());
+ int result = check_header(errh ? errh : ErrorHandler::ignore_handler());
if (result < 0)
_str = String();
return result;
@@ -404,7 +545,7 @@ FeatureList::params(int fid, int length, ErrorHandler *errh, bool old_style_offs
if (_str.length() == 0 || length < 0)
return String();
if (errh == 0)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
const uint8_t *data = _str.udata();
int len = _str.length();
@@ -425,6 +566,33 @@ FeatureList::params(int fid, int length, ErrorHandler *errh, bool old_style_offs
return _str.substring(poff, length);
}
+String
+FeatureList::size_params(int fid, const Name &name, ErrorHandler *errh) const
+{
+ // implement 'size' checks from Read Roberts
+ for (int i = 0; i < 2; i++) {
+ String s = params(fid, 10, errh, i != 0);
+ const uint8_t *data = s.udata();
+ if (USHORT_AT(data) == 0) // design size == 0
+ continue;
+ if (USHORT_AT(data + 2) == 0 // subfamily ID == 0
+ && USHORT_AT(data + 6) == 0 // range start == 0
+ && USHORT_AT(data + 8) == 0 // range end == 0
+ && USHORT_AT(data + 4) == 0) // menu name ID == 0
+ return s;
+ if (USHORT_AT(data) >= USHORT_AT(data + 6) // design size >= range start
+ && USHORT_AT(data) <= USHORT_AT(data + 8) // design size <= range end
+ && USHORT_AT(data + 6) < USHORT_AT(data + 8) // range start < range end
+ && USHORT_AT(data + 4) >= 256 // menu name ID >= 256
+ && USHORT_AT(data + 4) <= 32767 // menu name ID <= 32767
+ && name.english_name(USHORT_AT(data + 4))) // menu name ID is a name ID defined by the font
+ return s;
+ }
+ if (errh)
+ errh->error("no valid 'size' feature data in the 'size' feature");
+ return String();
+}
+
int
FeatureList::find(Tag tag, const Vector<int> &fids) const
{
@@ -486,7 +654,7 @@ FeatureList::lookups(int fid, Vector<int> &results, ErrorHandler *errh, bool cle
if (_str.length() == 0)
return -1;
if (errh == 0)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
const uint8_t *data = _str.udata();
int len = _str.length();
@@ -587,7 +755,7 @@ Coverage::Coverage(const String &str, ErrorHandler *errh, bool do_check) throw (
{
_str.align(2);
if (do_check) {
- if (check(errh ? errh : ErrorHandler::silent_handler()) < 0)
+ if (check(errh ? errh : ErrorHandler::ignore_handler()) < 0)
_str = String();
} else { // check()'s shorten-string side effect
const uint8_t *data = _str.udata();
@@ -987,7 +1155,7 @@ ClassDef::ClassDef(const String &str, ErrorHandler *errh) throw ()
: _str(str)
{
_str.align(2);
- if (check(errh ? errh : ErrorHandler::silent_handler()) < 0)
+ if (check(errh ? errh : ErrorHandler::ignore_handler()) < 0)
_str = String();
}
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfcmap.cc b/Build/source/utils/lcdf-typetools/libefont/otfcmap.cc
index f768995ef6b..97e655ec2b3 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfcmap.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfcmap.cc
@@ -2,7 +2,7 @@
/* otfcmap.{cc,hh} -- OpenType cmap table
*
- * Copyright (c) 2002-2004 Eddie Kohler
+ * Copyright (c) 2002-2006 Eddie Kohler
*
* This program 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
@@ -33,7 +33,7 @@ Cmap::Cmap(const String &s, ErrorHandler *errh)
: _str(s)
{
_str.align(4);
- _error = parse_header(errh ? errh : ErrorHandler::silent_handler());
+ _error = parse_header(errh ? errh : ErrorHandler::ignore_handler());
}
int
@@ -60,26 +60,26 @@ Cmap::parse_header(ErrorHandler *errh)
// ULONG offset
int last_platform = -1;
int last_encoding = -1;
- int last_version = -1;
+ int last_language = -1;
_first_unicode_table = -1;
- for (int i = 0; i < _ntables; i++) {
+ for (int i = 0; i < _ntables; i++) {
int loc = HEADER_SIZE + ENCODING_SIZE * i;
int platform = USHORT_AT(data + loc);
int encoding = USHORT_AT(data + loc + 2);
uint32_t offset = ULONG_AT(data + loc + 4);
- if (offset + 2 > (uint32_t) len)
+ if (offset + 6 > (uint32_t) len || USHORT_AT(data + offset + 2) < 6)
return errh->error("encoding data for entry %d out of range", i);
- int version = USHORT_AT(data + offset);
+ int language = USHORT_AT(data + offset + 4);
if (!(platform > last_platform
|| (platform == last_platform
&& (encoding > last_encoding
|| (encoding == last_encoding
- && version > last_version)))))
+ && language > last_language)))))
return errh->error("subtables out of order at entry %d", i);
if ((platform == 0 || (platform == 3 && encoding == 1))
&& _first_unicode_table < 0)
_first_unicode_table = i;
- last_platform = platform, last_encoding = encoding, last_version = version;
+ last_platform = platform, last_encoding = encoding, last_language = language;
}
_table_error.assign(_ntables, -2);
@@ -105,7 +105,7 @@ int
Cmap::check_table(int t, ErrorHandler *errh) const
{
if (!errh)
- errh = ErrorHandler::silent_handler();
+ errh = ErrorHandler::ignore_handler();
if (_error < 0 || t < 0 || t >= _ntables)
return errh->error("no such table");
if (_table_error[t] > -2)
@@ -244,97 +244,97 @@ Cmap::map_table(int t, uint32_t uni, ErrorHandler *errh) const
switch (USHORT_AT(data)) {
- case F_BYTE:
+ case F_BYTE:
if (uni < 256)
return data[6 + uni];
else
return 0;
- case F_HIBYTE: {
- if (uni >= 65536)
- return 0;
- int hi_byte = (uni >> 8) & 255;
- int subh = USHORT_AT(data + 6 + hi_byte * 2);
- if (subh == 0 && hi_byte) // XXX?
- return 0;
- data += 524 + subh;
- int firstCode = USHORT_AT(data);
- int entryCount = USHORT_AT(data + 2);
- int idDelta = SHORT_AT(data + 4);
- int idRangeOffset = USHORT_AT(data + 6);
- int lo_byte = uni & 255;
- if (lo_byte < firstCode || lo_byte >= firstCode + entryCount)
- return 0;
- int answer = USHORT_AT(data + 6 + idRangeOffset + (lo_byte - firstCode) * 2);
- if (answer == 0)
- return 0;
- return (answer + idDelta) & 65535;
- }
+ case F_HIBYTE: {
+ if (uni >= 65536)
+ return 0;
+ int hi_byte = (uni >> 8) & 255;
+ int subh = USHORT_AT(data + 6 + hi_byte * 2);
+ if (subh == 0 && hi_byte) // XXX?
+ return 0;
+ data += 524 + subh;
+ int firstCode = USHORT_AT(data);
+ int entryCount = USHORT_AT(data + 2);
+ int idDelta = SHORT_AT(data + 4);
+ int idRangeOffset = USHORT_AT(data + 6);
+ int lo_byte = uni & 255;
+ if (lo_byte < firstCode || lo_byte >= firstCode + entryCount)
+ return 0;
+ int answer = USHORT_AT(data + 6 + idRangeOffset + (lo_byte - firstCode) * 2);
+ if (answer == 0)
+ return 0;
+ return (answer + idDelta) & 65535;
+ }
- case F_SEGMENTED: {
- if (uni >= 65536)
- return 0;
- int segCount = USHORT_AT(data + 6) >> 1;
- const uint8_t *endCounts = data + 14;
- const uint8_t *startCounts = endCounts + (segCount << 1) + 2;
- const uint8_t *idDeltas = startCounts + (segCount << 1);
- const uint8_t *idRangeOffsets = idDeltas + (segCount << 1);
- int l = 0, r = segCount - 1;
- while (l <= r) {
- int m = (l + r) / 2;
- uint32_t endCount = USHORT_AT(endCounts + (m << 1));
- uint32_t startCount = USHORT_AT(startCounts + (m << 1));
- if (uni < startCount)
- r = m - 1;
- else if (uni <= endCount) {
- int idDelta = SHORT_AT(idDeltas + (m << 1));
- int idRangeOffset = USHORT_AT(idRangeOffsets + (m << 1));
- if (idRangeOffset == 0)
- return (idDelta + uni) & 65535;
- int g = USHORT_AT(idRangeOffsets + (m << 1) + idRangeOffset + ((uni - startCount) << 1));
- if (g == 0)
- return 0;
- return (idDelta + g) & 65535;
- } else
- l = m + 1;
- }
- return 0;
- }
+ case F_SEGMENTED: {
+ if (uni >= 65536)
+ return 0;
+ int segCount = USHORT_AT(data + 6) >> 1;
+ const uint8_t *endCounts = data + 14;
+ const uint8_t *startCounts = endCounts + (segCount << 1) + 2;
+ const uint8_t *idDeltas = startCounts + (segCount << 1);
+ const uint8_t *idRangeOffsets = idDeltas + (segCount << 1);
+ int l = 0, r = segCount - 1;
+ while (l <= r) {
+ int m = (l + r) / 2;
+ uint32_t endCount = USHORT_AT(endCounts + (m << 1));
+ uint32_t startCount = USHORT_AT(startCounts + (m << 1));
+ if (uni < startCount)
+ r = m - 1;
+ else if (uni <= endCount) {
+ int idDelta = SHORT_AT(idDeltas + (m << 1));
+ int idRangeOffset = USHORT_AT(idRangeOffsets + (m << 1));
+ if (idRangeOffset == 0)
+ return (idDelta + uni) & 65535;
+ int g = USHORT_AT(idRangeOffsets + (m << 1) + idRangeOffset + ((uni - startCount) << 1));
+ if (g == 0)
+ return 0;
+ return (idDelta + g) & 65535;
+ } else
+ l = m + 1;
+ }
+ return 0;
+ }
- case F_TRIMMED: {
- uint32_t firstCode = USHORT_AT(data + 6);
- uint32_t entryCount = USHORT_AT(data + 8);
- if (uni < firstCode || uni >= firstCode + entryCount)
- return 0;
- return USHORT_AT(data + 10 + ((uni - firstCode) << 1));
- }
+ case F_TRIMMED: {
+ uint32_t firstCode = USHORT_AT(data + 6);
+ uint32_t entryCount = USHORT_AT(data + 8);
+ if (uni < firstCode || uni >= firstCode + entryCount)
+ return 0;
+ return USHORT_AT(data + 10 + ((uni - firstCode) << 1));
+ }
- case F_SEGMENTED32: {
- uint32_t nGroups = ULONG_AT(data + 12);
- uint32_t l = 0, r = nGroups - 1;
- const uint8_t *groups = data + 16;
- while (l <= r) {
- uint32_t m = (l + r) / 2;
- uint32_t startCharCode = ULONG_AT(groups + m * 12);
- uint32_t endCharCode = ULONG_AT(groups + m * 12 + 4);
- if (uni < startCharCode)
- r = m - 1;
- else if (uni <= endCharCode)
- return ULONG_AT(groups + m * 12 + 8) + uni - startCharCode;
- else
- l = m + 1;
- }
- return 0;
- }
+ case F_SEGMENTED32: {
+ uint32_t nGroups = ULONG_AT(data + 12);
+ uint32_t l = 0, r = nGroups - 1;
+ const uint8_t *groups = data + 16;
+ while (l <= r) {
+ uint32_t m = (l + r) / 2;
+ uint32_t startCharCode = ULONG_AT(groups + m * 12);
+ uint32_t endCharCode = ULONG_AT(groups + m * 12 + 4);
+ if (uni < startCharCode)
+ r = m - 1;
+ else if (uni <= endCharCode)
+ return ULONG_AT(groups + m * 12 + 8) + uni - startCharCode;
+ else
+ l = m + 1;
+ }
+ return 0;
+ }
- default:
+ default:
return 0;
}
}
void
-Cmap::dump_table(int t, Vector<uint32_t> &cs, Vector<uint32_t> &gs, ErrorHandler *errh) const
+Cmap::dump_table(int t, Vector<uint32_t> &g2c, ErrorHandler *errh) const
{
if (check_table(t, errh) < 0)
return;
@@ -344,15 +344,15 @@ Cmap::dump_table(int t, Vector<uint32_t> &cs, Vector<uint32_t> &gs, ErrorHandler
switch (USHORT_AT(data)) {
- case F_BYTE:
+ case F_BYTE:
+ g2c.resize(256, 0);
for (int c = 0; c < 256; c++)
- if (int g = data[6 + c]) {
- cs.push_back(c);
- gs.push_back(g);
- }
+ if (int g = data[6 + c])
+ if (!g2c[g])
+ g2c[g] = c;
break;
- case F_HIBYTE:
+ case F_HIBYTE:
assert(USHORT_AT(data + 6) == 0);
for (int hi_byte = 0; hi_byte < 256; hi_byte++) {
int subh = USHORT_AT(data + 6 + hi_byte * 4);
@@ -366,67 +366,79 @@ Cmap::dump_table(int t, Vector<uint32_t> &cs, Vector<uint32_t> &gs, ErrorHandler
const uint8_t *gdata = tdata + 6 + idRangeOffset;
for (int i = 0; i < entryCount; i++)
if (int g = USHORT_AT(gdata + (i << 1))) {
- cs.push_back(hi_byte << 8 + firstCode + i);
- gs.push_back((idDelta + g) & 65535);
+ g = (idDelta + g) & 65535;
+ if (g >= g2c.size())
+ g2c.resize(g + 1, 0);
+ if (!g2c[g])
+ g2c[g] = (hi_byte << 8 + firstCode + i);
}
}
break;
- case F_SEGMENTED: {
- int segCountX2 = USHORT_AT(data + 6);
- const uint8_t *endCounts = data + 14;
- const uint8_t *startCounts = endCounts + segCountX2 + 2;
- const uint8_t *idDeltas = startCounts + segCountX2;
- const uint8_t *idRangeOffsets = idDeltas + segCountX2;
- for (int i = 0; i < segCountX2; i += 2) {
- int endCount = USHORT_AT(endCounts + i);
- int startCount = USHORT_AT(startCounts + i);
- int idDelta = SHORT_AT(idDeltas + i);
- int idRangeOffset = USHORT_AT(idRangeOffsets + i);
- if (idRangeOffset == 0) {
- for (int c = startCount; c <= endCount; c++) {
- cs.push_back(c);
- gs.push_back((c + idDelta) & 65535);
- }
- } else {
- const uint8_t *gdata = idRangeOffsets + i + idRangeOffset;
- for (int c = startCount; c <= endCount; c++, gdata += 2)
- if (int g = USHORT_AT(gdata)) {
- cs.push_back(c);
- gs.push_back((g + idDelta) & 65535);
- }
- }
- }
- break;
- }
+ case F_SEGMENTED: {
+ int segCountX2 = USHORT_AT(data + 6);
+ const uint8_t *endCounts = data + 14;
+ const uint8_t *startCounts = endCounts + segCountX2 + 2;
+ const uint8_t *idDeltas = startCounts + segCountX2;
+ const uint8_t *idRangeOffsets = idDeltas + segCountX2;
+ for (int i = 0; i < segCountX2; i += 2) {
+ int endCount = USHORT_AT(endCounts + i);
+ int startCount = USHORT_AT(startCounts + i);
+ int idDelta = SHORT_AT(idDeltas + i);
+ int idRangeOffset = USHORT_AT(idRangeOffsets + i);
+ if (idRangeOffset == 0) {
+ for (int c = startCount; c <= endCount; c++) {
+ Glyph g = (c + idDelta) & 65535;
+ if (g >= g2c.size())
+ g2c.resize(g + 1, 0);
+ if (!g2c[g])
+ g2c[g] = c;
+ }
+ } else {
+ const uint8_t *gdata = idRangeOffsets + i + idRangeOffset;
+ for (int c = startCount; c <= endCount; c++, gdata += 2)
+ if (int g = USHORT_AT(gdata)) {
+ g = (g + idDelta) & 65535;
+ if (g >= g2c.size())
+ g2c.resize(g + 1, 0);
+ if (!g2c[g])
+ g2c[g] = c;
+ }
+ }
+ }
+ break;
+ }
- case F_TRIMMED: {
- int firstCode = USHORT_AT(data + 6);
- int entryCount = USHORT_AT(data + 8);
- for (int i = 0; i < entryCount; i++)
- if (int g = USHORT_AT(data + 10 + (i << 1))) {
- cs.push_back(firstCode + i);
- gs.push_back(g);
- }
- break;
- }
+ case F_TRIMMED: {
+ int firstCode = USHORT_AT(data + 6);
+ int entryCount = USHORT_AT(data + 8);
+ for (int i = 0; i < entryCount; i++)
+ if (int g = USHORT_AT(data + 10 + (i << 1))) {
+ if (g >= g2c.size())
+ g2c.resize(g + 1, 0);
+ if (!g2c[g])
+ g2c[g] = firstCode + i;
+ }
+ break;
+ }
- case F_SEGMENTED32: {
- uint32_t nGroups = ULONG_AT(data + 12);
- const uint8_t *groups = data + 16;
- for (uint32_t i = 0; i < nGroups; i++, groups += 12) {
- uint32_t startCharCode = ULONG_AT(groups);
- uint32_t nCharCodes = ULONG_AT(groups + 4) - startCharCode;
- uint32_t startGlyphID = ULONG_AT(groups + 8);
- for (uint32_t i = 0; i <= nCharCodes; i++) {
- cs.push_back(startCharCode + i);
- gs.push_back(startGlyphID + i);
- }
- }
- break;
- }
+ case F_SEGMENTED32: {
+ uint32_t nGroups = ULONG_AT(data + 12);
+ const uint8_t *groups = data + 16;
+ for (uint32_t i = 0; i < nGroups; i++, groups += 12) {
+ uint32_t startCharCode = ULONG_AT(groups);
+ uint32_t nCharCodes = ULONG_AT(groups + 4) - startCharCode;
+ uint32_t startGlyphID = ULONG_AT(groups + 8);
+ if (startGlyphID + nCharCodes >= (uint32_t) g2c.size())
+ g2c.resize(startGlyphID + nCharCodes + 1, 0);
+ for (uint32_t i = 0; i <= nCharCodes; i++)
+ if (!g2c[startGlyphID + i])
+ g2c[startGlyphID + i] = startCharCode + i;
+ }
+ break;
+ }
- default:
+ default:
break;
}
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfdata.cc b/Build/source/utils/lcdf-typetools/libefont/otfdata.cc
index 00f9f513321..9c7afee92ea 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfdata.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfdata.cc
@@ -2,7 +2,7 @@
/* otfdata.{cc,hh} -- OpenType bounds-checked string type
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfdescrip.cc b/Build/source/utils/lcdf-typetools/libefont/otfdescrip.cc
index 52e60d5b2ef..f89ca1ab0e9 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfdescrip.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfdescrip.cc
@@ -1,6 +1,6 @@
/* otfdescrip.cc -- descriptions for OpenType tags
*
- * Copyright (c) 2002-2004 Eddie Kohler
+ * Copyright (c) 2002-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfgpos.cc b/Build/source/utils/lcdf-typetools/libefont/otfgpos.cc
index 9940d0190ad..612bb1007e0 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfgpos.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfgpos.cc
@@ -2,7 +2,7 @@
/* otfgpos.{cc,hh} -- OpenType GPOS table
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -87,18 +87,32 @@ GposLookup::GposLookup(const Data &d) throw (Error)
}
bool
-GposLookup::unparse_automatics(Vector<Positioning> &v) const
+GposLookup::unparse_automatics(Vector<Positioning> &v, ErrorHandler *errh) const
{
- int n = _d.u16(4);
+ int n = _d.u16(4), success = 0;
switch (_d.u16(0)) {
case L_SINGLE:
for (int i = 0; i < n; i++)
- GposSingle(_d.offset_subtable(HEADERSIZE + i*RECSIZE)).unparse(v);
- return true;
+ try {
+ GposSingle s(_d.offset_subtable(HEADERSIZE + i*RECSIZE));
+ s.unparse(v);
+ success++;
+ } catch (Error e) {
+ if (errh)
+ errh->warning("%s, continuing", e.description.c_str());
+ }
+ return success > 0;
case L_PAIR:
for (int i = 0; i < n; i++)
- GposPair(_d.offset_subtable(HEADERSIZE + i*RECSIZE)).unparse(v);
- return true;
+ try {
+ GposPair p(_d.offset_subtable(HEADERSIZE + i*RECSIZE));
+ p.unparse(v);
+ success++;
+ } catch (Error e) {
+ if (errh)
+ errh->warning("%s, continuing", e.description.c_str());
+ }
+ return success > 0;
default:
return false;
}
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfgsub.cc b/Build/source/utils/lcdf-typetools/libefont/otfgsub.cc
index 09edc97f481..001887c8fee 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfgsub.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfgsub.cc
@@ -2,7 +2,7 @@
/* otfgsub.{cc,hh} -- OpenType GSUB table
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -587,36 +587,8 @@ Gsub::Gsub(const Data &d, const Font *otf, ErrorHandler *errh) throw (Error)
// Check for "correct" chaining context rules, as suggested by Adobe's
// OpenType FDK
try {
- Name nametable(otf->table("name"), ErrorHandler::silent_handler());
- String vstr = nametable.name(std::find_if(nametable.begin(), nametable.end(), Name::PlatformPred(Name::N_VERSION, 1, 0, 0)));
- const char *v = vstr.begin(), *endv = vstr.end();
- if (v + 20 <= endv) {
- if (v[0] != 'O' || v[1] != 'T' || v[2] != 'F' || v[3] == ';')
- goto try_core;
- for (v += 4; v < endv && *v != ';'; v++)
- /* do nothing */;
- if (v + 3 >= endv || v[1] != 'P' || v[2] != 'S' || v[3] == ';')
- goto try_core;
- for (v += 4; v < endv && *v != ';'; v++)
- /* do nothing */;
- if (v + 11 >= endv || memcmp(v + 1, "Core 1.0.", 9) != 0
- || (v[10] != '2' && v[10] != '3')
- || (v[11] < '0' || v[11] > '9'))
- goto try_core;
- _chaincontext_reverse_backtrack = true;
- }
- try_core:
- v = vstr.begin();
- if (v + 16 <= endv) {
- if (v[0] != 'C' || v[1] != 'o' || v[2] != 'r' || v[3] != 'e')
- goto done;
- for (v += 4; v < endv && *v != ';'; v++)
- /* do nothing */;
- if (v + 12 > endv || memcmp(v, ";makeotf.lib", 12) != 0)
- goto done;
- _chaincontext_reverse_backtrack = true;
- }
- done: ;
+ Name nametable(otf->table("name"), ErrorHandler::ignore_handler());
+ _chaincontext_reverse_backtrack = nametable.version_chaincontext_reverse_backtrack();
} catch (Error) {
}
}
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfname.cc b/Build/source/utils/lcdf-typetools/libefont/otfname.cc
index d836c41de2b..d6096b7b921 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfname.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfname.cc
@@ -2,7 +2,7 @@
/* otfname.{cc,hh} -- OpenType name table
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -21,6 +21,7 @@
#include <errno.h>
#include <stdlib.h>
#include <string.h>
+#include <algorithm>
#define USHORT_AT(d) (ntohs(*(const uint16_t *)(d)))
@@ -30,7 +31,7 @@ Name::Name(const String &s, ErrorHandler *errh)
: _str(s)
{
_str.align(2);
- _error = parse_header(errh ? errh : ErrorHandler::silent_handler());
+ _error = parse_header(errh ? errh : ErrorHandler::ignore_handler());
}
int
@@ -41,13 +42,15 @@ Name::parse_header(ErrorHandler *errh)
// USHORT numTables
int len = _str.length();
const uint8_t *data = _str.udata();
+ if (len == 0)
+ return errh->error("font has no 'name' table"), -EFAULT;
if (HEADER_SIZE > len)
- return errh->error("OTF name too small for header"), -EFAULT;
+ return errh->error("'name' table too small"), -EFAULT;
if (!(data[0] == '\000' && data[1] == '\000'))
- return errh->error("bad name version number"), -ERANGE;
+ return errh->error("bad 'name' version number"), -ERANGE;
int count = USHORT_AT(data + 2);
if (HEADER_SIZE + count*NAMEREC_SIZE > len)
- return errh->error("OTF name too small for header"), -EFAULT;
+ return errh->error("'name' table too small"), -EFAULT;
return 0;
}
@@ -64,4 +67,42 @@ Name::name(const_iterator i) const
return String();
}
+String
+Name::english_name(int nameid) const
+{
+ return name(std::find_if(begin(), end(), EnglishPlatformPred(nameid)));
+}
+
+bool
+Name::version_chaincontext_reverse_backtrack() const
+{
+ String vstr = name(std::find_if(begin(), end(), PlatformPred(N_VERSION, 1, 0, 0)));
+ const char *v = vstr.begin(), *endv = vstr.end();
+ if (v + 20 <= endv) {
+ if (v[0] != 'O' || v[1] != 'T' || v[2] != 'F' || v[3] == ';')
+ goto try_core;
+ for (v += 4; v < endv && *v != ';'; v++)
+ /* do nothing */;
+ if (v + 3 >= endv || v[1] != 'P' || v[2] != 'S' || v[3] == ';')
+ goto try_core;
+ for (v += 4; v < endv && *v != ';'; v++)
+ /* do nothing */;
+ if (v + 11 >= endv || memcmp(v + 1, "Core 1.0.", 9) != 0
+ || (v[10] != '2' && v[10] != '3')
+ || (v[11] < '0' || v[11] > '9'))
+ goto try_core;
+ return true;
+ }
+ try_core:
+ v = vstr.begin();
+ if (v + 16 > endv
+ || v[0] != 'C' || v[1] != 'o' || v[2] != 'r' || v[3] != 'e')
+ return false;
+ for (v += 4; v < endv && *v != ';'; v++)
+ /* do nothing */;
+ if (v + 12 > endv || memcmp(v, ";makeotf.lib", 12) != 0)
+ return false;
+ return true;
+}
+
}}
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfos2.cc b/Build/source/utils/lcdf-typetools/libefont/otfos2.cc
index 4c9778d7f07..094387548a7 100644
--- a/Build/source/utils/lcdf-typetools/libefont/otfos2.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/otfos2.cc
@@ -2,7 +2,7 @@
/* otfos2.{cc,hh} -- OpenType OS/2 table
*
- * Copyright (c) 2005 Eddie Kohler
+ * Copyright (c) 2005-2006 Eddie Kohler
*
* This program 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
@@ -27,7 +27,7 @@ namespace Efont { namespace OpenType {
Os2::Os2(const Data &data, ErrorHandler *errh)
: _data(data)
{
- _error = parse_header(errh ? errh : ErrorHandler::silent_handler());
+ _error = parse_header(errh ? errh : ErrorHandler::ignore_handler());
if (_error < 0)
_data = Data();
}
diff --git a/Build/source/utils/lcdf-typetools/libefont/otfpost.cc b/Build/source/utils/lcdf-typetools/libefont/otfpost.cc
new file mode 100644
index 00000000000..37358095a8c
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/libefont/otfpost.cc
@@ -0,0 +1,206 @@
+// -*- related-file-name: "../include/efont/otfpost.hh" -*-
+
+/* otfpost.{cc,hh} -- OpenType post table
+ *
+ * Copyright (c) 2006 Eddie Kohler
+ *
+ * This program 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 of the License, or (at your option)
+ * any later version. This program 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <efont/otfpost.hh>
+#include <lcdf/error.hh>
+#include <errno.h>
+#include <stdlib.h>
+#include <string.h>
+#include <efont/otfdata.hh> // for ntohl()
+
+#define USHORT_AT(d) (ntohs(*(const uint16_t *)(d)))
+#define SHORT_AT(d) ((int16_t) ntohs(*(const uint16_t *)(d)))
+#define ULONG_AT(d) (ntohl(*(const uint32_t *)(d)))
+#define LONG_AT(d) ((int32_t) ntohl(*(const uint32_t *)(d)))
+
+namespace Efont { namespace OpenType {
+
+static const char * const mac_names[] = {
+ ".notdef", ".null", "nonmarkingreturn", "space", // 0-3
+ "exclam", "quotedbl", "numbersign", "dollar", // 4-7
+ "percent", "ampersand", "quotesingle", "parenleft", // 8-11
+ "parenright", "asterisk", "plus", "comma", // 12-15
+ "hyphen", "period", "slash", "zero", // 16-19
+ "one", "two", "three", "four", // 20-23
+ "five", "six", "seven", "eight", // 24-27
+ "nine", "colon", "semicolon", "less", // 28-31
+ "equal", "greater", "question", "at", // 32-35
+ "A", "B", "C", "D", // 36-39
+ "E", "F", "G", "H", // 40-43
+ "I", "J", "K", "L", // 44-47
+ "M", "N", "O", "P", // 48-51
+ "Q", "R", "S", "T", // 52-55
+ "U", "V", "W", "X", // 56-59
+ "Y", "Z", "bracketleft", "backslash", // 60-63
+ "bracketright", "asciicircum", "underscore", "grave", // 64-67
+ "a", "b", "c", "d", // 68-71
+ "e", "f", "g", "h", // 72-75
+ "i", "j", "k", "l", // 76-79
+ "m", "n", "o", "p", // 80-83
+ "q", "r", "s", "t", // 84-87
+ "u", "v", "w", "x", // 88-91
+ "y", "z", "braceleft", "bar", // 92-95
+ "braceright", "asciitilde", "Adieresis", "Aring", // 96-99
+ "Ccedilla", "Eacute", "Ntilde", "Odieresis", // 100-103
+ "Udieresis", "aacute", "agrave", "acircumflex", // 104-107
+ "adieresis", "atilde", "aring", "ccedilla", // 108-111
+ "eacute", "egrave", "ecircumflex", "edieresis", // 112-115
+ "iacute", "igrave", "icircumflex", "idieresis", // 116-119
+ "ntilde", "oacute", "ograve", "ocircumflex", // 120-123
+ "odieresis", "otilde", "uacute", "ugrave", // 124-127
+ "ucircumflex", "udieresis", "dagger", "degree", // 128-131
+ "cent", "sterling", "section", "bullet", // 132-135
+ "paragraph", "germandbls", "registered", "copyright", // 136-139
+ "trademark", "acute", "dieresis", "notequal", // 140-143
+ "AE", "Oslash", "infinity", "plusminus", // 144-147
+ "lessequal", "greaterequal", "yen", "mu", // 148-151
+ "partialdiff", "summation", "product", "pi", // 152-155
+ "integral", "ordfeminine", "ordmasculine", "Omega", // 156-159
+ "ae", "oslash", "questiondown", "exclamdown", // 160-163
+ "logicalnot", "radical", "florin", "approxequal", // 164-167
+ "Delta", "guillemotleft", "guillemotright", "ellipsis", // 168-171
+ "nonbreakingspace", "Agrave", "Atilde", "Otilde", // 172-175
+ "OE", "oe", "endash", "emdash", // 176-179
+ "quotedblleft", "quotedblright", "quoteleft", "quoteright", // 180-183
+ "divide", "lozenge", "ydieresis", "Ydieresis", // 184-187
+ "fraction", "currency", "guilsinglleft", "guilsinglright", // 188-191
+ "fi", "fl", "daggerdbl", "periodcentered", // 192-195
+ "quotesinglbase", "quotedblbase", "perthousand", "Acircumflex", // 196-199
+ "Ecircumflex", "Aacute", "Edieresis", "Egrave", // 200-203
+ "Iacute", "Icircumflex", "Idieresis", "Igrave", // 204-207
+ "Oacute", "Ocircumflex", "apple", "Ograve", // 208-211
+ "Uacute", "Ucircumflex", "Ugrave", "dotlessi", // 212-215
+ "circumflex", "tilde", "macron", "breve", // 216-219
+ "dotaccent", "ring", "cedilla", "hungarumlaut", // 220-223
+ "ogonek", "caron", "Lslash", "lslash", // 224-227
+ "Scaron", "scaron", "Zcaron", "zcaron", // 228-231
+ "brokenbar", "Eth", "eth", "Yacute", // 232-235
+ "yacute", "Thorn", "thorn", "minus", // 236-239
+ "multiply", "onesuperior", "twosuperior", "threesuperior", // 240-243
+ "onehalf", "onequarter", "threequarters", "franc", // 244-247
+ "Gbreve", "gbreve", "Idotaccent", "Scedilla", // 248-251
+ "scedilla", "Cacute", "cacute", "Ccaron", // 252-255
+ "ccaron", "dcroat" // 256-257
+};
+
+
+Post::Post(const String &s, ErrorHandler *errh)
+ : _str(s), _version(0)
+{
+ _str.align_long();
+ _error = parse_header(errh ? errh : ErrorHandler::ignore_handler());
+}
+
+int
+Post::parse_header(ErrorHandler *errh)
+{
+ // HEADER FORMAT:
+ // 0 FIXED version
+ // 4 FIXED italicAngle
+ // 8 FWORD underlinePosition
+ // 10 FWORD underlineThickness
+ // 12 ULONG isFixedPitch
+ // 16 ULONG minMemType42
+ // 20 ULONG maxMemType42
+ // 24 ULONG minMemType1
+ // 28 ULONG maxMemType1
+ int len = _str.length();
+ const uint8_t *data = _str.udata();
+ if (HEADER_SIZE > len)
+ return errh->error("OTF post too small for header"), -EFAULT;
+ _version = USHORT_AT(data); // ignore minor version number
+ // except that version 2.5 isn't compatible
+ if (_version < 1 || _version > 3
+ || (_version == 2 && USHORT_AT(data + 2) == 0x5000))
+ return errh->error("bad post version number"), -ERANGE;
+ if (_version == 2) {
+ // VERSION 2.0 GLYPH NAMES FORMAT:
+ // 32 USHORT numberOfGlyphs
+ // 34 USHORT glyphNameIndex[mumberOfGlyphs]
+ // CHAR names[...]
+ if (HEADER_SIZE + 2 > len
+ || ((_nglyphs = USHORT_AT(data + HEADER_SIZE)),
+ HEADER_SIZE + 2 + 2 * _nglyphs > len))
+ return errh->error("OTF post too small for glyph map"), -EFAULT;
+ const uint8_t *gni = data + HEADER_SIZE + 2;
+ const uint8_t *names = gni + 2 * _nglyphs;
+ int next_name = N_MAC_GLYPHS, g;
+ for (int i = 0; i < _nglyphs; i++, gni += 2)
+ if ((g = USHORT_AT(gni)) >= 32768)
+ return errh->error("bad glyph name index in post"), -EINVAL;
+ else
+ while (g >= next_name) {
+ if (names - data > len
+ || (names + 1 + names[0]) - data > len)
+ return errh->error("OTF post too small for glyph names"), -EFAULT;
+ _extend_glyph_names.push_back(names - data);
+ names += 1 + names[0];
+ next_name++;
+ }
+ } else if (_version == 1)
+ _nglyphs = N_MAC_GLYPHS;
+ else
+ _nglyphs = -1;
+
+ return 0;
+}
+
+double
+Post::italic_angle() const
+{
+ if (error() < 0)
+ return -1;
+ return (double) LONG_AT(_str.udata() + 4) / 65536.;
+}
+
+bool
+Post::is_fixed_pitch() const
+{
+ if (error() < 0)
+ return false;
+ return ULONG_AT(_str.udata() + 12) != 0;
+}
+
+bool
+Post::glyph_names(Vector<PermString> &gnames) const
+{
+ gnames.clear();
+ if (error() < 0)
+ return false;
+ if (_version == 1) {
+ for (int i = 0; i < N_MAC_GLYPHS; i++)
+ gnames.push_back(mac_names[i]);
+ return true;
+ } else if (_version == 2) {
+ const uint8_t *data = _str.udata();
+ const uint8_t *gni = data + HEADER_SIZE + 2;
+ for (int i = 0; i < _nglyphs; i++, gni += 2) {
+ int g = USHORT_AT(gni);
+ if (g < N_MAC_GLYPHS)
+ gnames.push_back(mac_names[g]);
+ else {
+ const uint8_t *n = data + _extend_glyph_names[g - N_MAC_GLYPHS];
+ gnames.push_back(PermString((const char *) n + 1, *n));
+ }
+ }
+ return true;
+ } else
+ return false;
+}
+
+}}
diff --git a/Build/source/utils/lcdf-typetools/libefont/pairop.cc b/Build/source/utils/lcdf-typetools/libefont/pairop.cc
index 3c167026b6d..b2a5ce1f7bb 100644
--- a/Build/source/utils/lcdf-typetools/libefont/pairop.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/pairop.cc
@@ -2,7 +2,7 @@
/* pairop.{cc,hh} -- ligature/kern font metrics
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/psres.cc b/Build/source/utils/lcdf-typetools/libefont/psres.cc
index 8cef05e6fbe..adb0e992617 100644
--- a/Build/source/utils/lcdf-typetools/libefont/psres.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/psres.cc
@@ -2,7 +2,7 @@
/* psres.{cc,hh} -- PSres.upr files
*
- * Copyright (c) 1999-2004 Eddie Kohler
+ * Copyright (c) 1999-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1bounds.cc b/Build/source/utils/lcdf-typetools/libefont/t1bounds.cc
index ef273f17d3f..a9cff1585cb 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1bounds.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1bounds.cc
@@ -2,7 +2,7 @@
/* t1bounds.{cc,hh} -- charstring bounding box finder
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1cs.cc b/Build/source/utils/lcdf-typetools/libefont/t1cs.cc
index 8fb582884a3..c8907b270c5 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1cs.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1cs.cc
@@ -2,7 +2,7 @@
/* t1cs.{cc,hh} -- Type 1/2 charstrings
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1csgen.cc b/Build/source/utils/lcdf-typetools/libefont/t1csgen.cc
index 4ae22871bc7..04218de5855 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1csgen.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1csgen.cc
@@ -2,7 +2,7 @@
/* t1csgen.{cc,hh} -- Type 1 charstring generation
*
- * Copyright (c) 1998-2005 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
@@ -52,6 +52,7 @@ Type1CharstringGen::Type1CharstringGen(int precision)
else
_precision = 5;
_f_precision = _precision;
+ clear();
}
void
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1font.cc b/Build/source/utils/lcdf-typetools/libefont/t1font.cc
index ebc93e3c28f..068002db58f 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1font.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1font.cc
@@ -2,7 +2,7 @@
/* t1font.{cc,hh} -- Type 1 font
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1fontskel.cc b/Build/source/utils/lcdf-typetools/libefont/t1fontskel.cc
index c7bdc8ed359..5b717a0be37 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1fontskel.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1fontskel.cc
@@ -1,6 +1,6 @@
/* t1fontskel.{cc,hh} -- Type 1 font skeleton
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1interp.cc b/Build/source/utils/lcdf-typetools/libefont/t1interp.cc
index 34f0a78be64..478235dd158 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1interp.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1interp.cc
@@ -2,7 +2,7 @@
/* t1interp.{cc,hh} -- Type 1/2 charstring interpretation
*
- * Copyright (c) 1998-2005 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1item.cc b/Build/source/utils/lcdf-typetools/libefont/t1item.cc
index 3387535a07d..ee71a3af92d 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1item.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1item.cc
@@ -2,7 +2,7 @@
/* t1item.{cc,hh} -- items in a Type 1 font
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1mm.cc b/Build/source/utils/lcdf-typetools/libefont/t1mm.cc
index 8efd6857720..8743479e4fa 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1mm.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1mm.cc
@@ -2,7 +2,7 @@
/* t1mm.{cc,hh} -- Type 1 multiple master font information
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1rw.cc b/Build/source/utils/lcdf-typetools/libefont/t1rw.cc
index 2264ace804d..152084c8ec4 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1rw.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1rw.cc
@@ -2,7 +2,7 @@
/* t1rw.{cc,hh} -- Type 1 font reading and writing
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/t1unparser.cc b/Build/source/utils/lcdf-typetools/libefont/t1unparser.cc
index dd214cad13a..a976155341e 100644
--- a/Build/source/utils/lcdf-typetools/libefont/t1unparser.cc
+++ b/Build/source/utils/lcdf-typetools/libefont/t1unparser.cc
@@ -2,7 +2,7 @@
/* t1unparser.{cc,hh} -- debug printing of Type 1 fonts
*
- * Copyright (c) 1998-2005 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/libefont/ttfcs.cc b/Build/source/utils/lcdf-typetools/libefont/ttfcs.cc
new file mode 100644
index 00000000000..b2cd1a1af12
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/libefont/ttfcs.cc
@@ -0,0 +1,225 @@
+// -*- related-file-name: "../include/efont/ttfcs.hh" -*-
+
+/* ttfcs.{cc,hh} -- TrueType "charstring" emulation
+ *
+ * Copyright (c) 2006 Eddie Kohler
+ *
+ * This program 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 of the License, or (at your option)
+ * any later version. This program 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <efont/ttfcs.hh>
+#include <efont/t1csgen.hh>
+#include <efont/otfpost.hh>
+#include <efont/otfcmap.hh>
+#include <lcdf/hashmap.hh>
+namespace Efont {
+
+TrueTypeBoundsCharstringProgram::TrueTypeBoundsCharstringProgram(const OpenType::Font *otf)
+ : _otf(otf), _nglyphs(-1), _loca_long(false), _em_xform(1000. / 1024),
+ _loca(otf->table("loca")), _glyf(otf->table("glyf")),
+ _hmtx(otf->table("hmtx")), _got_glyph_names(false), _got_unicodes(false)
+{
+ OpenType::Data maxp(otf->table("maxp"));
+ if (maxp.length() >= 6)
+ _nglyphs = maxp.u16(4);
+
+ OpenType::Data head(otf->table("head"));
+ // HEAD format:
+ // 0 Fixed Table version number 0x00010000 (ver. 1.0)
+ // 4 Fixed fontRevision
+ // 8 ULONG checkSumAdjustment
+ // 12 ULONG magicNumber Set to 0x5F0F3CF5
+ // 16 USHORT flags
+ // 18 USHORT unitsPerEm
+ // 20 LONGDATETIME created
+ // 28 LONGDATETIME modified
+ // 36 USHORT xMin
+ // 38 SHORT yMin
+ // 40 SHORT xMax
+ // 42 SHORT yMax
+ // 44 USHORT macStyle
+ // 46 USHORT lowestRecPPEM
+ // 48 SHORT fontDirectionHint
+ // 50 SHORT indexToLocFormat
+ // 52 SHORT glyphDataFormat
+ if (head.length() >= 54
+ && head.u32(0) == 0x10000
+ && head.u32(12) == 0x5F0F3CF5) {
+ _loca_long = head.u16(50) != 0;
+ _em_xform = 1000. / (double) head.u16(18);
+ }
+ if (_loca_long)
+ _loca.align_long();
+ int loca_onesize = (_loca_long ? 4 : 2);
+ if (_nglyphs >= _loca.length() / loca_onesize)
+ _nglyphs = (_loca.length() / loca_onesize) - 1;
+
+ // horizontal metrics
+ OpenType::Data hhea(_otf->table("hhea"));
+ // HHEA format:
+ // 0 Fixed Table version number 0x00010000 for version 1.0.
+ // 4 FWORD Ascender
+ // 6 FWORD Descender
+ // 8 FWORD LineGap
+ // 10 UFWORD advanceWidthMax
+ // 12 FWORD minLeftSideBearing
+ // 14 FWORD minRightSideBearing
+ // 16 FWORD xMaxExtent
+ // 18 SHORT caretSlopeRise
+ // 20 SHORT caretSlopeRun
+ // 22 SHORT caretOffset
+ // 24 SHORT (reserved)
+ // 26 SHORT (reserved)
+ // 28 SHORT (reserved)
+ // 30 SHORT (reserved)
+ // 32 SHORT metricDataFormat
+ // 34 USHORT numberOfHMetrics
+ if (hhea.length() >= 36
+ && hhea.u32(0) == 0x10000)
+ _nhmtx = hhea.u16(34);
+ if (_nhmtx * 4 > _hmtx.length())
+ _nhmtx = _hmtx.length() / 4;
+}
+
+TrueTypeBoundsCharstringProgram::~TrueTypeBoundsCharstringProgram()
+{
+ for (Charstring **cs = _charstrings.begin(); cs < _charstrings.end(); cs++)
+ delete *cs;
+}
+
+int
+TrueTypeBoundsCharstringProgram::nglyphs() const
+{
+ return _nglyphs;
+}
+
+PermString
+TrueTypeBoundsCharstringProgram::glyph_name(int gi) const
+{
+ // generate glyph names based on what pdftex can understand
+ if (gi == 0)
+ return PermString(".notdef");
+
+ // try 'post' table glyph names
+ if (!_got_glyph_names) {
+ OpenType::Post post(_otf->table("post"));
+ if (post.ok())
+ post.glyph_names(_glyph_names);
+ _got_glyph_names = true;
+ }
+ if (gi >= 0 && gi < _glyph_names.size())
+ return _glyph_names[gi];
+
+ // try 'uniXXXX' names
+ if (!_got_unicodes) {
+ OpenType::Cmap cmap(_otf->table("cmap"));
+ if (cmap.ok())
+ cmap.unmap_all(_unicodes);
+ // make sure we only use uniquely identified glyphs
+ HashMap<uint32_t, int> unicode_usage(-1);
+ for (int g = 0; g < _unicodes.size(); g++)
+ if (_unicodes[g]) {
+ int i = unicode_usage.find_force(_unicodes[g], g);
+ if (i != g)
+ _unicodes[i] = _unicodes[g] = 0;
+ }
+ _got_unicodes = true;
+ }
+
+ if (gi >= 0 && gi < _unicodes.size() && _unicodes[gi] > 0 && _unicodes[gi] <= 0xFFFF) {
+ char buf[10];
+ sprintf(buf, "uni%04X", _unicodes[gi]);
+ return PermString(buf);
+ } else
+ return permprintf("index%d", gi);
+}
+
+void
+TrueTypeBoundsCharstringProgram::glyph_names(Vector<PermString> &gn) const
+{
+ gn.clear();
+ for (int gi = 0; gi < _nglyphs; gi++)
+ gn.push_back(glyph_name(gi));
+}
+
+Charstring *
+TrueTypeBoundsCharstringProgram::glyph(int gi) const
+{
+ if (gi < 0 || gi >= _nglyphs)
+ return 0;
+ if (_charstrings.size() <= gi)
+ _charstrings.resize(gi + 1, (Charstring *) 0);
+ if (!_charstrings[gi]) {
+ // calculate glyf offsets
+ uint32_t offset, end_offset;
+ if (_loca_long) {
+ offset = _loca.u32(gi * 4);
+ end_offset = _loca.u32(gi * 4 + 4);
+ } else {
+ offset = _loca.u16(gi * 2) * 2;
+ end_offset = _loca.u16(gi * 2 + 2) * 2;
+ }
+
+ // fetch bounding box from glyf
+ int ncontours, xmin, ymin, xmax, ymax;
+ if (offset != end_offset) {
+ if (offset > end_offset || offset + 10 > end_offset
+ || end_offset > (uint32_t) _glyf.length())
+ return 0;
+
+ ncontours = _glyf.s16(offset);
+ xmin = _glyf.s16(offset + 2);
+ ymin = _glyf.s16(offset + 4);
+ xmax = _glyf.s16(offset + 6);
+ ymax = _glyf.s16(offset + 8);
+ } else
+ ncontours = xmin = ymin = xmax = ymax = 0;
+
+ // fetch horizontal metrics
+ int advance_width, lsb;
+ if (gi >= _nhmtx) {
+ advance_width = (_nhmtx ? _hmtx.u16((_nhmtx - 1) * 4) : 0);
+ int hmtx_offset = _nhmtx * 4 + (gi - _nhmtx) * 2;
+ lsb = (hmtx_offset + 2 <= _hmtx.length() ? _hmtx.s16(hmtx_offset) : 0);
+ } else {
+ advance_width = _hmtx.u16(gi * 4);
+ lsb = _hmtx.s16(gi * 4 + 2);
+ }
+
+ // make charstring
+ Type1CharstringGen gen;
+ if (ncontours == 0) {
+ gen.gen_number(0, 'X');
+ gen.gen_number(advance_width * _em_xform);
+ gen.gen_command(Charstring::cHsbw);
+ } else {
+ gen.gen_number(lsb * _em_xform, 'X');
+ gen.gen_number(advance_width * _em_xform);
+ gen.gen_command(Charstring::cHsbw);
+ gen.gen_moveto(Point(xmin * _em_xform, ymin * _em_xform), false);
+ if (xmax != xmin || ymax == ymin)
+ gen.gen_number((xmax - xmin) * _em_xform, 'x');
+ if (ymax != ymin)
+ gen.gen_number((ymax - ymin) * _em_xform, 'y');
+ gen.gen_command(ymax == ymin ? Charstring::cHlineto
+ : (xmax == xmin ? Charstring::cVlineto
+ : Charstring::cRlineto));
+ gen.gen_command(Charstring::cClosepath);
+ }
+ gen.gen_command(Charstring::cEndchar);
+
+ _charstrings[gi] = gen.output();
+ }
+ return _charstrings[gi];
+}
+
+}
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/Makefile.am b/Build/source/utils/lcdf-typetools/liblcdf/Makefile.am
index d42083c1de4..6531d5186e5 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/Makefile.am
+++ b/Build/source/utils/lcdf-typetools/liblcdf/Makefile.am
@@ -9,6 +9,7 @@ liblcdf_a_SOURCES = bezier.cc \
filename.cc \
globmatch.cc \
landmark.cc \
+ md5.c \
permstr.cc \
point.cc \
slurper.cc \
@@ -32,7 +33,7 @@ srclinks:
cd $(top_srcdir); for i in bezier error filename globmatch landmark permstr point slurper straccum string transform; do \
ln -sf ../../liblcdf/liblcdf/$$i.cc liblcdf/$$i.cc ; \
ln -sf ../../../liblcdf/include/lcdf/$$i.hh include/lcdf/$$i.hh ; done
- cd $(top_srcdir); for i in clp strtonum; do \
+ cd $(top_srcdir); for i in clp strtonum md5; do \
ln -sf ../../liblcdf/liblcdf/$$i.c liblcdf/$$i.c ; \
ln -sf ../../../liblcdf/include/lcdf/$$i.h include/lcdf/$$i.h ; done
cd $(top_srcdir); for i in fixlibc.c vectorv.cc; do \
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/Makefile.in b/Build/source/utils/lcdf-typetools/liblcdf/Makefile.in
index 8bb2739f04a..0e46cb1c67c 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/liblcdf/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(liblcdf_a_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -51,9 +49,9 @@ ARFLAGS = cru
liblcdf_a_AR = $(AR) $(ARFLAGS)
am_liblcdf_a_OBJECTS = bezier.$(OBJEXT) clp.$(OBJEXT) error.$(OBJEXT) \
filename.$(OBJEXT) globmatch.$(OBJEXT) landmark.$(OBJEXT) \
- permstr.$(OBJEXT) point.$(OBJEXT) slurper.$(OBJEXT) \
- straccum.$(OBJEXT) string.$(OBJEXT) strtonum.$(OBJEXT) \
- transform.$(OBJEXT) vectorv.$(OBJEXT)
+ md5.$(OBJEXT) permstr.$(OBJEXT) point.$(OBJEXT) \
+ slurper.$(OBJEXT) straccum.$(OBJEXT) string.$(OBJEXT) \
+ strtonum.$(OBJEXT) transform.$(OBJEXT) vectorv.$(OBJEXT)
liblcdf_a_OBJECTS = $(am_liblcdf_a_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -169,6 +167,7 @@ liblcdf_a_SOURCES = bezier.cc \
filename.cc \
globmatch.cc \
landmark.cc \
+ md5.c \
permstr.cc \
point.cc \
slurper.cc \
@@ -236,6 +235,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/filename.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/globmatch.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/landmark.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/permstr.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/point.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slurper.Po@am__quote@
@@ -445,7 +445,7 @@ srclinks:
cd $(top_srcdir); for i in bezier error filename globmatch landmark permstr point slurper straccum string transform; do \
ln -sf ../../liblcdf/liblcdf/$$i.cc liblcdf/$$i.cc ; \
ln -sf ../../../liblcdf/include/lcdf/$$i.hh include/lcdf/$$i.hh ; done
- cd $(top_srcdir); for i in clp strtonum; do \
+ cd $(top_srcdir); for i in clp strtonum md5; do \
ln -sf ../../liblcdf/liblcdf/$$i.c liblcdf/$$i.c ; \
ln -sf ../../../liblcdf/include/lcdf/$$i.h include/lcdf/$$i.h ; done
cd $(top_srcdir); for i in fixlibc.c vectorv.cc; do \
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/bezier.cc b/Build/source/utils/lcdf-typetools/liblcdf/bezier.cc
index c117657d2c5..54402c90276 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/bezier.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/bezier.cc
@@ -2,7 +2,7 @@
/* bezier.{cc,hh} -- cubic Bezier curves
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/clp.c b/Build/source/utils/lcdf-typetools/liblcdf/clp.c
index 93ad7e408e4..aa99f34f40e 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/clp.c
+++ b/Build/source/utils/lcdf-typetools/liblcdf/clp.c
@@ -2,7 +2,7 @@
/* clp.c - Complete source code for CLP.
* This file is part of CLP, the command line parser package.
*
- * Copyright (c) 1997-2005 Eddie Kohler, kohler@cs.ucla.edu
+ * Copyright (c) 1997-2006 Eddie Kohler, kohler@cs.ucla.edu
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/error.cc b/Build/source/utils/lcdf-typetools/liblcdf/error.cc
index 50b79f4d2f4..2602f460bca 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/error.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/error.cc
@@ -4,7 +4,7 @@
* Eddie Kohler
*
* Copyright (c) 1999-2000 Massachusetts Institute of Technology
- * Copyright (c) 2001-2005 Eddie Kohler
+ * Copyright (c) 2001-2006 Eddie Kohler
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
@@ -629,11 +629,6 @@ FileErrorHandler::handle_text(Seriousness seriousness, const String &message)
// SILENT ERROR HANDLER
//
-class SilentErrorHandler : public BaseErrorHandler { public:
- SilentErrorHandler() { }
- void handle_text(Seriousness, const String &);
-};
-
void
SilentErrorHandler::handle_text(Seriousness, const String &)
{
@@ -645,7 +640,7 @@ SilentErrorHandler::handle_text(Seriousness, const String &)
//
static ErrorHandler *the_default_handler = 0;
-static ErrorHandler *the_silent_handler = 0;
+static ErrorHandler *the_ignore_handler = 0;
ErrorHandler::Conversion *
ErrorHandler::add_conversion(const String &name, ConversionHook hook)
@@ -684,8 +679,8 @@ void
ErrorHandler::static_cleanup()
{
delete the_default_handler;
- delete the_silent_handler;
- the_default_handler = the_silent_handler = 0;
+ delete the_ignore_handler;
+ the_default_handler = the_ignore_handler = 0;
while (error_items) {
Conversion *next = error_items->next;
delete error_items;
@@ -707,11 +702,11 @@ ErrorHandler::default_handler()
}
ErrorHandler *
-ErrorHandler::silent_handler()
+ErrorHandler::ignore_handler()
{
- if (!the_silent_handler)
- the_silent_handler = new SilentErrorHandler;
- return the_silent_handler;
+ if (!the_ignore_handler)
+ the_ignore_handler = new SilentErrorHandler;
+ return the_ignore_handler;
}
void
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/filename.cc b/Build/source/utils/lcdf-typetools/liblcdf/filename.cc
index 5cf060ff3d7..fcd8e89029a 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/filename.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/filename.cc
@@ -2,7 +2,7 @@
/* filename.{cc,hh} -- filenames
*
- * Copyright (c) 1999-2004 Eddie Kohler
+ * Copyright (c) 1999-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/globmatch.cc b/Build/source/utils/lcdf-typetools/liblcdf/globmatch.cc
index 57d5306f42e..023a8f2a4ca 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/globmatch.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/globmatch.cc
@@ -2,7 +2,7 @@
/* globmatch.{cc,hh} -- glob_match() function for shell globbing
*
- * Copyright (c) 2000-2004 Eddie Kohler
+ * Copyright (c) 2000-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/landmark.cc b/Build/source/utils/lcdf-typetools/liblcdf/landmark.cc
index 7c4ae9ed835..339ae4ac98e 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/landmark.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/landmark.cc
@@ -2,7 +2,7 @@
/* landmark.{cc,hh} -- FILE:LINE type landmarks
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/md5.c b/Build/source/utils/lcdf-typetools/liblcdf/md5.c
index d9fbd7510e2..ecacfadd3bc 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/md5.c
+++ b/Build/source/utils/lcdf-typetools/liblcdf/md5.c
@@ -1,4 +1,4 @@
-/* -*- mode: c; c-basic-offset: 8 -*- */
+/* -*- mode: c; c-basic-offset: 8; related-file-name: "../include/lcdf/md5.h" -*- */
/* md5.c - MD5 Message-Digest Algorithm
* Copyright (C) 1995, 1996, 1998, 1999 Free Software Foundation, Inc.
*
@@ -38,8 +38,7 @@
#include <string.h>
#include <assert.h>
#include <lcdf/inttypes.h>
-
-#include "md5.h"
+#include <lcdf/md5.h>
#ifdef __cplusplus
extern "C" {
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/permstr.cc b/Build/source/utils/lcdf-typetools/liblcdf/permstr.cc
index 3c604689178..c977364cd31 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/permstr.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/permstr.cc
@@ -2,7 +2,7 @@
/* permstr.{cc,hh} -- permanent strings
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/point.cc b/Build/source/utils/lcdf-typetools/liblcdf/point.cc
index 8759b175408..c39ff60ac77 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/point.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/point.cc
@@ -2,7 +2,7 @@
/* point.{cc,hh} -- 2D points
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/slurper.cc b/Build/source/utils/lcdf-typetools/liblcdf/slurper.cc
index 59bc63d612f..54905b8bdbd 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/slurper.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/slurper.cc
@@ -2,7 +2,7 @@
/* slurper.{cc,hh} -- reading from files a line at a time
*
- * Copyright (c) 1998-2004 Eddie Kohler
+ * Copyright (c) 1998-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/straccum.cc b/Build/source/utils/lcdf-typetools/liblcdf/straccum.cc
index fef45282c65..339628861e3 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/straccum.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/straccum.cc
@@ -4,7 +4,7 @@
* Eddie Kohler
*
* Copyright (c) 1999-2000 Massachusetts Institute of Technology
- * Copyright (c) 2001-2005 Eddie Kohler
+ * Copyright (c) 2001-2006 Eddie Kohler
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/string.cc b/Build/source/utils/lcdf-typetools/liblcdf/string.cc
index ae260438d66..8bcf1596304 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/string.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/string.cc
@@ -4,7 +4,7 @@
* Eddie Kohler
*
* Copyright (c) 1999-2000 Massachusetts Institute of Technology
- * Copyright (c) 2001-2005 Eddie Kohler
+ * Copyright (c) 2001-2006 Eddie Kohler
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/transform.cc b/Build/source/utils/lcdf-typetools/liblcdf/transform.cc
index 05eb47e450c..b59da9de99a 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/transform.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/transform.cc
@@ -2,7 +2,7 @@
/* transform.{cc,hh} -- planar affine transformations
*
- * Copyright (c) 2000-2004 Eddie Kohler
+ * Copyright (c) 2000-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/liblcdf/vectorv.cc b/Build/source/utils/lcdf-typetools/liblcdf/vectorv.cc
index f444cf6acb9..26dc1a05a66 100644
--- a/Build/source/utils/lcdf-typetools/liblcdf/vectorv.cc
+++ b/Build/source/utils/lcdf-typetools/liblcdf/vectorv.cc
@@ -2,7 +2,7 @@
* vectorv.cc -- template specialization for Vector<void*>
* Eddie Kohler
*
- * Copyright (c) 1999-2004 Massachusetts Institute of Technology
+ * Copyright (c) 1999-2006 Massachusetts Institute of Technology
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
diff --git a/Build/source/utils/lcdf-typetools/missing b/Build/source/utils/lcdf-typetools/missing
index 64b5f901dd5..894e786e16c 100644
--- a/Build/source/utils/lcdf-typetools/missing
+++ b/Build/source/utils/lcdf-typetools/missing
@@ -1,9 +1,9 @@
#! /bin/sh
# Common stub for a few missing GNU programs while installing.
-scriptversion=2004-09-07.08
+scriptversion=2005-06-08.21
-# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
# Free Software Foundation, Inc.
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
@@ -19,8 +19,8 @@ scriptversion=2004-09-07.08
# 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.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
@@ -87,12 +87,12 @@ Supported PROGRAM values:
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
Send bug reports to <bug-automake@gnu.org>."
- exit 0
+ exit $?
;;
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
echo "missing $scriptversion (GNU Automake)"
- exit 0
+ exit $?
;;
-*)
@@ -288,11 +288,18 @@ WARNING: \`$1' is $msg. You should only need it if
call might also be the consequence of using a buggy \`make' (AIX,
DU, IRIX). You might want to install the \`Texinfo' package or
the \`GNU make' package. Grab either from any GNU archive site."
+ # The file to touch is that specified with -o ...
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
if test -z "$file"; then
- file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
- file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+ # ... or it is the one specified with @setfilename ...
+ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+ file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
+ # ... or it is derived from the source name (dir/f.texi becomes f.info)
+ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
fi
+ # If the file does not exist, the user really needs makeinfo;
+ # let's fail without touching anything.
+ test -f $file || exit 1
touch $file
;;
diff --git a/Build/source/utils/lcdf-typetools/mkinstalldirs b/Build/source/utils/lcdf-typetools/mkinstalldirs
deleted file mode 100755
index 8ab885ec92d..00000000000
--- a/Build/source/utils/lcdf-typetools/mkinstalldirs
+++ /dev/null
@@ -1,99 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-errstatus=0
-dirmode=""
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
-
-# process command line arguments
-while test $# -gt 0 ; do
- case "${1}" in
- -h | --help | --h* ) # -h for help
- echo "${usage}" 1>&2; exit 0 ;;
- -m ) # -m PERM arg
- shift
- test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; }
- dirmode="${1}"
- shift ;;
- -- ) shift; break ;; # stop option processing
- -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option
- * ) break ;; # first non-opt arg
- esac
-done
-
-for file
-do
- if test -d "$file"; then
- shift
- else
- break
- fi
-done
-
-case $# in
-0) exit 0 ;;
-esac
-
-case $dirmode in
-'')
- if mkdir -p -- . 2>/dev/null; then
- echo "mkdir -p -- $*"
- exec mkdir -p -- "$@"
- fi ;;
-*)
- if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
- echo "mkdir -m $dirmode -p -- $*"
- exec mkdir -m "$dirmode" -p -- "$@"
- fi ;;
-esac
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp"
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- else
- if test ! -z "$dirmode"; then
- echo "chmod $dirmode $pathcomp"
-
- lasterr=""
- chmod "$dirmode" "$pathcomp" || lasterr=$?
-
- if test ! -z "$lasterr"; then
- errstatus=$lasterr
- fi
- fi
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 3
-# End:
-# mkinstalldirs ends here
diff --git a/Build/source/utils/lcdf-typetools/mmafm/Makefile.in b/Build/source/utils/lcdf-typetools/mmafm/Makefile.in
index a5099ee1cb1..7fc3afae05c 100644
--- a/Build/source/utils/lcdf-typetools/mmafm/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/mmafm/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(mmafm_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/mmafm/main.cc b/Build/source/utils/lcdf-typetools/mmafm/main.cc
index d5f88a960f2..8c04fecf160 100644
--- a/Build/source/utils/lcdf-typetools/mmafm/main.cc
+++ b/Build/source/utils/lcdf-typetools/mmafm/main.cc
@@ -1,6 +1,6 @@
/* main.cc -- driver for mmafm program
*
- * Copyright (c) 1997-2004 Eddie Kohler
+ * Copyright (c) 1997-2006 Eddie Kohler
*
* This program 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
@@ -321,7 +321,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("mmafm (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 1997-2004 Eddie Kohler\n\
+ printf("Copyright (C) 1997-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
diff --git a/Build/source/utils/lcdf-typetools/mmafm/mmafm.1 b/Build/source/utils/lcdf-typetools/mmafm/mmafm.1
index a837a4fa3c8..bd1ab4bed98 100644
--- a/Build/source/utils/lcdf-typetools/mmafm/mmafm.1
+++ b/Build/source/utils/lcdf-typetools/mmafm/mmafm.1
@@ -1,5 +1,5 @@
.\" -*-nroff-*-
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -168,9 +168,7 @@ You haven't yet created an AMCP file for \fIFont\fR.
'
.SH AUTHOR
.na
-Eddie Kohler, kohler@icir.org
-.br
-http://www.pdos.lcs.mit.edu/~eddietwo/
+Eddie Kohler, kohler@cs.ucla.edu
.PP
The latest version is available from:
.br
diff --git a/Build/source/utils/lcdf-typetools/mmpfb/Makefile.in b/Build/source/utils/lcdf-typetools/mmpfb/Makefile.in
index 4129a27dc2a..764d39a37e9 100644
--- a/Build/source/utils/lcdf-typetools/mmpfb/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/mmpfb/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(mmpfb_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/mmpfb/main.cc b/Build/source/utils/lcdf-typetools/mmpfb/main.cc
index ed578b727d9..b323882ecbd 100644
--- a/Build/source/utils/lcdf-typetools/mmpfb/main.cc
+++ b/Build/source/utils/lcdf-typetools/mmpfb/main.cc
@@ -1,6 +1,6 @@
/* main.cc -- driver for mmpfb program
*
- * Copyright (c) 1997-2004 Eddie Kohler
+ * Copyright (c) 1997-2006 Eddie Kohler
*
* This program 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
@@ -335,11 +335,11 @@ main(int argc, char *argv[])
break;
case QUIET_OPT:
- if (clp->negated)
- errh = ErrorHandler::default_handler();
- else
- errh = ErrorHandler::silent_handler();
- break;
+ if (clp->negated)
+ errh = ErrorHandler::default_handler();
+ else
+ errh = new SilentErrorHandler;
+ break;
case OUTPUT_OPT:
if (outfile) errh->fatal("output file already specified");
@@ -354,7 +354,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("mmpfb (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 1997-2004 Eddie Kohler\n\
+ printf("Copyright (C) 1997-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
diff --git a/Build/source/utils/lcdf-typetools/mmpfb/mmpfb.1 b/Build/source/utils/lcdf-typetools/mmpfb/mmpfb.1
index 23bac8dd967..51ade36bc55 100644
--- a/Build/source/utils/lcdf-typetools/mmpfb/mmpfb.1
+++ b/Build/source/utils/lcdf-typetools/mmpfb/mmpfb.1
@@ -1,5 +1,5 @@
.\" -*-nroff-*-
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -199,9 +199,7 @@ will have \fIN\fR subroutines.
'
.SH AUTHOR
.na
-Eddie Kohler, kohler@icir.org
-.br
-http://www.pdos.lcs.mit.edu/~eddietwo/
+Eddie Kohler, kohler@cs.ucla.edu
.PP
The latest version is available from:
.br
diff --git a/Build/source/utils/lcdf-typetools/mmpfb/myfont.cc b/Build/source/utils/lcdf-typetools/mmpfb/myfont.cc
index a2c9eda0dbd..9816daefe47 100644
--- a/Build/source/utils/lcdf-typetools/mmpfb/myfont.cc
+++ b/Build/source/utils/lcdf-typetools/mmpfb/myfont.cc
@@ -1,6 +1,6 @@
/* myfont.cc -- general multiple- to single-master conversion
*
- * Copyright (c) 1997-2004 Eddie Kohler
+ * Copyright (c) 1997-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/mmpfb/t1minimize.cc b/Build/source/utils/lcdf-typetools/mmpfb/t1minimize.cc
index 54699cb5d31..71e95f6b744 100644
--- a/Build/source/utils/lcdf-typetools/mmpfb/t1minimize.cc
+++ b/Build/source/utils/lcdf-typetools/mmpfb/t1minimize.cc
@@ -1,6 +1,6 @@
/* t1minimize.cc -- make minimal copy of a Type 1 font
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/mmpfb/t1rewrit.cc b/Build/source/utils/lcdf-typetools/mmpfb/t1rewrit.cc
index e6973594ed4..2c402964626 100644
--- a/Build/source/utils/lcdf-typetools/mmpfb/t1rewrit.cc
+++ b/Build/source/utils/lcdf-typetools/mmpfb/t1rewrit.cc
@@ -1,6 +1,6 @@
/* t1rewrit.cc -- routines for multiple- to single-master charstring conversion
*
- * Copyright (c) 1997-2005 Eddie Kohler
+ * Copyright (c) 1997-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/otfinfo/Makefile.in b/Build/source/utils/lcdf-typetools/otfinfo/Makefile.in
index eed8680df8a..72bab8988ed 100644
--- a/Build/source/utils/lcdf-typetools/otfinfo/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/otfinfo/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(otfinfo_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.1 b/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.1
index e0bbcd10886..16effec25a0 100644
--- a/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.1
+++ b/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.1
@@ -1,5 +1,5 @@
'\"t
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -12,7 +12,7 @@
otfinfo \- report information about OpenType fonts
.SH SYNOPSIS
.B otfinfo
-\%[\fB-sfzpg\fR]
+\%[\fB-sfzpvag\fR]
\%[\fIFILE...\fR]
'
.SH DESCRIPTION
@@ -79,6 +79,41 @@ Print each font's PostScript name. For example:
'
.Sp
.TP 5
+.BR \-a ", " \-\-family
+Print each font's family name. For example:
+.nf
+ Minion Pro
+.fi
+'
+.Sp
+.TP 5
+.BR \-v ", " \-\-font\-version
+Print font version information, if available. For example:
+.nf
+ OTF 1.013;PS 001.000;Core 1.0.27;makeotf.lib(1.11)
+.fi
+'
+.Sp
+.TP 5
+.BR \-i ", " \-\-info
+Print each font's name, version, designer, vendor, copyright, and license
+information. For example:
+.nf
+ Family: Minion Pro
+ Subfamily: Regular
+ Full name: Minion Pro
+ PostScript name: MinionPro-Regular
+ Version: OTF 1.011;PS 001.000;Core 1.0.27;makeotf.lib1.3.1
+ Unique ID: 1.011;ADBE;MinionPro-Regular
+ Designer: Robert Slimbach
+ Vendor URL: http://www.adobe.com/type/
+ Trademark: Minion is either a registered trademark or a trademark of Adobe Systems Incorporated in the United States and/or other countries.
+ Copyright: \(co 2000 Adobe Systems Incorporated. All Rights Reserved. U.S. Patent Des. 337,604. Other patents pending.
+ License URL: http://www.adobe.com/type/legal.html
+.fi
+'
+.Sp
+.TP 5
.BR \-g ", " \-\-glyphs
Print the name of every glyph in each font, one per line. For example:
.nf
@@ -91,6 +126,18 @@ Print the name of every glyph in each font, one per line. For example:
.fi
Works for PostScript-flavored OpenType fonts only.
'
+.Sp
+.TP 5
+.BR \-t ", " \-\-tables
+Print the size and name of every OpenType table in the font. For example:
+.nf
+ 52 BASE
+ 87723 CFF
+ 4940 DSIG
+ 21366 GPOS
+ \&...
+.fi
+'
.PD
'
'
@@ -140,4 +187,4 @@ Print the version number and some short non-warranty information and exit.
Version 1.4
'
.SH AUTHOR
-Eddie Kohler (kohler@icir.org)
+Eddie Kohler (kohler@cs.ucla.edu)
diff --git a/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.cc b/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.cc
index 05a49d4aea3..0bd94901d02 100644
--- a/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.cc
+++ b/Build/source/utils/lcdf-typetools/otfinfo/otfinfo.cc
@@ -1,6 +1,6 @@
/* otfinfo.cc -- driver for reporting information about OpenType fonts
*
- * Copyright (c) 2003-2005 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -50,7 +50,10 @@ using namespace Efont;
#define QUERY_OPTICAL_SIZE_OPT 322
#define QUERY_POSTSCRIPT_NAME_OPT 323
#define QUERY_GLYPHS_OPT 324
-#define TABLES_OPT 325
+#define QUERY_FVERSION_OPT 325
+#define TABLES_OPT 326
+#define QUERY_FAMILY_OPT 327
+#define INFO_OPT 328
Clp_Option options[] = {
@@ -61,18 +64,13 @@ Clp_Option options[] = {
{ "scripts", 's', QUERY_SCRIPTS_OPT, 0, 0 },
{ "optical-size", 'z', QUERY_OPTICAL_SIZE_OPT, 0, 0 },
{ "postscript-name", 'p', QUERY_POSTSCRIPT_NAME_OPT, 0, 0 },
+ { "family", 'a', QUERY_FAMILY_OPT, 0, 0 },
+ { "font-version", 'v', QUERY_FVERSION_OPT, 0, 0 },
+ { "info", 'i', INFO_OPT, 0, 0 },
{ "glyphs", 'g', QUERY_GLYPHS_OPT, 0, 0 },
- { "tables", 0, TABLES_OPT, 0, 0 },
+ { "tables", 't', TABLES_OPT, 0, 0 },
{ "help", 'h', HELP_OPT, 0, 0 },
{ "version", 0, VERSION_OPT, 0, 0 },
- // old synonyms
- { "query-features", 0, QUERY_FEATURES_OPT, 0, 0 },
- { "qf", 0, QUERY_FEATURES_OPT, 0, 0 },
- { "query-scripts", 's', QUERY_SCRIPTS_OPT, 0, 0 },
- { "qs", 0, QUERY_SCRIPTS_OPT, 0, 0 },
- { "query-optical-size", 'z', QUERY_OPTICAL_SIZE_OPT, 0, 0 },
- { "query-postscript-name", 'p', QUERY_POSTSCRIPT_NAME_OPT, 0, 0 },
- { "query-glyphs", 'g', QUERY_GLYPHS_OPT, 0, 0 }
};
@@ -110,11 +108,15 @@ Usage: %s [-sfzpg] [OTFFILES...]\n\n",
program_name);
printf("\
Query options:\n\
- -s, --scripts Report font's supported scripts.\n\
- -f, --features Report font's GSUB/GPOS features.\n\
- -z, --optical-size Report font's optical size information.\n\
- -p, --postscript-name Report font's PostScript name.\n\
- -g, --glyphs Report font's glyph names.\n\
+ -s, --scripts Report font's supported scripts.\n\
+ -f, --features Report font's GSUB/GPOS features.\n\
+ -z, --optical-size Report font's optical size information.\n\
+ -p, --postscript-name Report font's PostScript name.\n\
+ -a, --family Report font's family name.\n\
+ -v, --font-version Report font's version information.\n\
+ -i, --info Report font's names and designer/vendor info.\n\
+ -g, --glyphs Report font's glyph names.\n\
+ -t, --tables Report font's OpenType tables.\n\
\n\
Other options:\n\
--script=SCRIPT[.LANG] Set script used for --features [latn].\n\
@@ -267,9 +269,9 @@ do_query_optical_size(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandle
if (size_fid < 0)
throw OpenType::Error();
- // it looks like Adobe fonts implement an old, incorrect idea
+ // old Adobe fonts implement an old, incorrect idea
// of what the FeatureParams offset means.
- OpenType::Data size_data = gpos.feature_list().params(size_fid, 10, errh, true);
+ OpenType::Data size_data = gpos.feature_list().size_params(size_fid, name, errh);
if (!size_data.length())
throw OpenType::Error();
@@ -279,7 +281,7 @@ do_query_optical_size(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandle
sa << ", size range (" << (size_data.u16(6) / 10.) << " pt, "
<< (size_data.u16(8) / 10.) << " pt], "
<< "subfamily ID " << size_data.u16(2);
- if (String n = name.name(std::find_if(name.begin(), name.end(), OpenType::Name::EnglishPlatformPred(size_data.u16(4)))))
+ if (String n = name.english_name(size_data.u16(4)))
sa << ", subfamily name " << n;
}
@@ -292,6 +294,22 @@ do_query_optical_size(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandle
}
static void
+do_query_family_name(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandler *result_errh)
+{
+ int before_nerrors = errh->nerrors();
+ String family_name = "no family name information";
+
+ if (String name_table = otf.table("name")) {
+ OpenType::Name name(name_table, errh);
+ if (name.ok())
+ family_name = name.english_name(OpenType::Name::N_FAMILY);
+ }
+
+ if (errh->nerrors() == before_nerrors)
+ result_errh->message("%s", family_name.c_str());
+}
+
+static void
do_query_postscript_name(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandler *result_errh)
{
int before_nerrors = errh->nerrors();
@@ -300,7 +318,7 @@ do_query_postscript_name(const OpenType::Font &otf, ErrorHandler *errh, ErrorHan
if (String name_table = otf.table("name")) {
OpenType::Name name(name_table, errh);
if (name.ok())
- postscript_name = name.name(std::find_if(name.begin(), name.end(), OpenType::Name::EnglishPlatformPred(OpenType::Name::N_POSTSCRIPT)));
+ postscript_name = name.english_name(OpenType::Name::N_POSTSCRIPT);
}
if (errh->nerrors() == before_nerrors)
@@ -308,6 +326,68 @@ do_query_postscript_name(const OpenType::Font &otf, ErrorHandler *errh, ErrorHan
}
static void
+do_query_font_version(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandler *result_errh)
+{
+ int before_nerrors = errh->nerrors();
+ String version = "no version information";
+
+ if (String name_table = otf.table("name")) {
+ OpenType::Name name(name_table, errh);
+ if (name.ok())
+ version = name.english_name(OpenType::Name::N_VERSION);
+ }
+
+ if (errh->nerrors() == before_nerrors)
+ result_errh->message("%s", version.c_str());
+}
+
+static void
+do_info(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandler *result_errh)
+{
+ int before_nerrors = errh->nerrors();
+ StringAccum sa;
+
+ if (String name_table = otf.table("name")) {
+ OpenType::Name name(name_table, errh);
+ if (name.ok()) {
+ if (String s = name.english_name(OpenType::Name::N_FAMILY))
+ sa << "Family: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_SUBFAMILY))
+ sa << "Subfamily: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_FULLNAME))
+ sa << "Full name: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_POSTSCRIPT))
+ sa << "PostScript name: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_VERSION))
+ sa << "Version: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_UNIQUEID))
+ sa << "Unique ID: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_DESCRIPTION))
+ sa << "Description: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_DESIGNER))
+ sa << "Designer: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_DESIGNER_URL))
+ sa << "Designer URL: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_MANUFACTURER))
+ sa << "Manufacturer: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_VENDOR_URL))
+ sa << "Vendor URL: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_TRADEMARK))
+ sa << "Trademark: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_COPYRIGHT))
+ sa << "Copyright: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_LICENSE_URL))
+ sa << "License URL: " << s << "\n";
+ if (String s = name.english_name(OpenType::Name::N_LICENSE_DESCRIPTION))
+ sa << "License Description: " << s << "\n";
+ }
+ }
+
+ if (errh->nerrors() == before_nerrors)
+ result_errh->message("%s", (sa ? sa.c_str() : "no designer information"));
+}
+
+static void
do_query_glyphs(const OpenType::Font &otf, ErrorHandler *errh, ErrorHandler *result_errh)
{
int before_nerrors = errh->nerrors();
@@ -396,7 +476,10 @@ main(int argc, char *argv[])
case QUERY_OPTICAL_SIZE_OPT:
case QUERY_POSTSCRIPT_NAME_OPT:
case QUERY_GLYPHS_OPT:
+ case QUERY_FAMILY_OPT:
+ case QUERY_FVERSION_OPT:
case TABLES_OPT:
+ case INFO_OPT:
if (query)
usage_error(errh, "supply exactly one query type option");
query = opt;
@@ -406,7 +489,7 @@ main(int argc, char *argv[])
if (clp->negated)
errh = ErrorHandler::default_handler();
else
- errh = ErrorHandler::silent_handler();
+ errh = new SilentErrorHandler;
break;
case VERBOSE_OPT:
@@ -415,7 +498,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("otfinfo (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 2003-2005 Eddie Kohler\n\
+ printf("Copyright (C) 2003-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
@@ -446,7 +529,7 @@ particular purpose.\n");
done:
if (!query)
- usage_error(errh, "supply exactly one --query option");
+ usage_error(errh, "supply exactly one query option");
if (!input_files.size())
input_files.push_back("-");
if (script.null())
@@ -477,8 +560,14 @@ particular purpose.\n");
do_query_postscript_name(otf, &cerrh, result_errh);
else if (query == QUERY_GLYPHS_OPT)
do_query_glyphs(otf, &cerrh, result_errh);
+ else if (query == QUERY_FAMILY_OPT)
+ do_query_family_name(otf, &cerrh, result_errh);
+ else if (query == QUERY_FVERSION_OPT)
+ do_query_font_version(otf, &cerrh, result_errh);
else if (query == TABLES_OPT)
do_tables(otf, &cerrh, result_errh);
+ else if (query == INFO_OPT)
+ do_info(otf, &cerrh, result_errh);
}
return (errh->nerrors() == 0 ? 0 : 1);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/Makefile.am b/Build/source/utils/lcdf-typetools/otftotfm/Makefile.am
index 9f320107499..18f4e88c302 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/Makefile.am
+++ b/Build/source/utils/lcdf-typetools/otftotfm/Makefile.am
@@ -8,7 +8,6 @@ otftotfm_SOURCES = \
automatic.cc automatic.hh \
dvipsencoding.cc dvipsencoding.hh \
glyphfilter.cc glyphfilter.hh \
- md5.c md5.h \
metrics.cc metrics.hh \
otftotfm.cc otftotfm.hh \
secondary.cc secondary.hh \
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/Makefile.in b/Build/source/utils/lcdf-typetools/otftotfm/Makefile.in
index e4f79adef3d..71a5259ac27 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/otftotfm/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(otftotfm_SOURCES) $(EXTRA_otftotfm_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
@@ -50,9 +48,8 @@ am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am_otftotfm_OBJECTS = automatic.$(OBJEXT) dvipsencoding.$(OBJEXT) \
- glyphfilter.$(OBJEXT) md5.$(OBJEXT) metrics.$(OBJEXT) \
- otftotfm.$(OBJEXT) secondary.$(OBJEXT) uniprop.$(OBJEXT) \
- util.$(OBJEXT)
+ glyphfilter.$(OBJEXT) metrics.$(OBJEXT) otftotfm.$(OBJEXT) \
+ secondary.$(OBJEXT) uniprop.$(OBJEXT) util.$(OBJEXT)
otftotfm_OBJECTS = $(am_otftotfm_OBJECTS)
DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/depcomp
@@ -169,7 +166,6 @@ otftotfm_SOURCES = \
automatic.cc automatic.hh \
dvipsencoding.cc dvipsencoding.hh \
glyphfilter.cc glyphfilter.hh \
- md5.c md5.h \
metrics.cc metrics.hh \
otftotfm.cc otftotfm.hh \
secondary.cc secondary.hh \
@@ -252,7 +248,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dvipsencoding.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/glyphfilter.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kpseinterface.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/metrics.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otftotfm.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secondary.Po@am__quote@
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/automatic.cc b/Build/source/utils/lcdf-typetools/otftotfm/automatic.cc
index 5bc10511bf4..5796ee281af 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/automatic.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/automatic.cc
@@ -1,6 +1,6 @@
/* automatic.{cc,hh} -- code for automatic mode and interfacing with kpathsea
*
- * Copyright (c) 2003-2005 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -66,7 +66,10 @@ static const struct {
{ "VPL", "VPLDESTDIR", "fonts/vpl/%" },
{ "Type 1", "T1DESTDIR", "fonts/type1/%" },
{ "DVIPS map", "DVIPS directory", "#fonts/map/dvips/@#dvips/@" },
- { "DVIPS updmap", "DVIPS directory", "dvips" }
+ { "DVIPS updmap", "DVIPS directory", "dvips" },
+ { "TrueType", "TTFDESTDIR", "fonts/truetype/%" },
+ { "OpenType", "OPENTYPEDESTDIR", "fonts/opentype/%" },
+ { "Type 42", "T42DESTDIR", "fonts/type42/%" }
};
#if HAVE_KPATHSEA
@@ -431,6 +434,43 @@ installed_type1_dotlessj(const String &otf_filename, const String &ps_fontname,
return String();
}
+String
+installed_truetype(const String &otf_filename, bool allow_generate, ErrorHandler *errh)
+{
+ String file = pathname_filename(otf_filename);
+
+#if HAVE_KPATHSEA
+ if (String path = kpsei_string(kpsei_find_file(file.c_str(), KPSEI_FMT_TRUETYPE))) {
+ if (verbose)
+ errh->message("TrueType file %s found with kpathsea at %s", file.c_str(), path.c_str());
+ return path;
+ }
+#endif
+
+#if HAVE_AUTO_CFFTOT1
+ // if not found, and can generate on the fly, run cfftot1
+ if (allow_generate && otf_filename && otf_filename != "-" && getodir(O_TRUETYPE, errh)) {
+ String ttf_filename = odir[O_TRUETYPE] + "/" + file;
+ if (ttf_filename.find_left('\'') >= 0 || ttf_filename.find_left('\'') >= 0)
+ return String();
+ String command = "cp " + shell_quote(otf_filename) + " " + shell_quote(ttf_filename);
+ int retval = mysystem(command.c_str(), errh);
+ if (retval == 127)
+ errh->error("could not run '%s'", command.c_str());
+ else if (retval < 0)
+ errh->error("could not run '%s': %s", command.c_str(), strerror(errno));
+ else if (retval != 0)
+ errh->error("'%s' failed", command.c_str());
+ if (retval == 0) {
+ update_odir(O_TRUETYPE, ttf_filename, errh);
+ return ttf_filename;
+ }
+ }
+#endif
+
+ return String();
+}
+
int
update_autofont_map(const String &fontname, String mapline, ErrorHandler *errh)
{
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/automatic.hh b/Build/source/utils/lcdf-typetools/otftotfm/automatic.hh
index 944b68dd6d3..5bd8d04a974 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/automatic.hh
+++ b/Build/source/utils/lcdf-typetools/otftotfm/automatic.hh
@@ -4,7 +4,7 @@
class ErrorHandler;
enum { O_ENCODING = 0, O_TFM, O_PL, O_VF, O_VPL, O_TYPE1, O_MAP, O_MAP_PARENT,
- NUMODIR };
+ O_TRUETYPE, O_OPENTYPE, O_TYPE42, NUMODIR };
extern bool automatic;
extern bool no_create;
@@ -17,6 +17,7 @@ const char *odirname(int o);
void update_odir(int o, String file, ErrorHandler *);
String installed_type1(const String &otf_filename, const String &ps_fontname, bool allow_generate, ErrorHandler *);
String installed_type1_dotlessj(const String &otf_filename, const String &ps_fontname, bool allow_generate, ErrorHandler *);
+String installed_truetype(const String &otf_filename, bool allow_generate, ErrorHandler *errh);
int update_autofont_map(const String &fontname, String mapline, ErrorHandler *);
String locate_encoding(String encfile, ErrorHandler *, bool literal = false);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.cc b/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.cc
index e85dff13419..1cc18a9a870 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.cc
@@ -1,6 +1,6 @@
/* dvipsencoding.{cc,hh} -- store a DVIPS encoding
*
- * Copyright (c) 2003-2005 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -18,6 +18,7 @@
#include "metrics.hh"
#include "secondary.hh"
#include <lcdf/error.hh>
+#include <lcdf/straccum.hh>
#include <string.h>
#include <stdio.h>
#include <ctype.h>
@@ -26,7 +27,8 @@
#include "util.hh"
static String::Initializer initializer;
-enum { GLYPHLIST_MORE = 0x40000000, U_EMPTYSLOT = 0xD801 };
+enum { GLYPHLIST_MORE = 0x40000000,
+ U_EMPTYSLOT = 0xD801, U_ALTSELECTOR = 0xD802 };
static HashMap<String, int> glyphlist(-1);
static PermString::Initializer perm_initializer;
PermString DvipsEncoding::dot_notdef(".notdef");
@@ -34,10 +36,9 @@ PermString DvipsEncoding::dot_notdef(".notdef");
#define NEXT_GLYPH_NAME(gn) ("/" + (gn))
int
-DvipsEncoding::parse_glyphlist(String text)
+DvipsEncoding::add_glyphlist(String text)
{
// XXX ignores glyph names that map to multiple characters
- glyphlist.clear();
const char *data = text.c_str();
int pos = 0, len = text.length();
while (1) {
@@ -57,24 +58,24 @@ DvipsEncoding::parse_glyphlist(String text)
read_uni:
if (first == pos
|| pos + 1 >= len
- || data[pos] != ';'
+ || (data[pos] != ';' && data[pos] != ',')
|| !isxdigit(data[pos+1])
|| ((value = strtol(data + pos + 1, &next, 16)),
- (!isspace(*next) && *next && *next != ';')))
+ (!isspace(*next) && *next && *next != ';' && *next != ',')))
return -1;
while (*next == ' ' || *next == '\t')
next++;
if (*next == '\r' || *next == '\n')
glyphlist.insert(glyph_name, value);
- else if (*next == ';')
+ else if (*next == ';' || *next == ',')
glyphlist.insert(glyph_name, value | GLYPHLIST_MORE);
else
- while (*next != '\r' && *next != '\n' && *next != ';')
+ while (*next != '\r' && *next != '\n' && *next != ';' && *next != ',')
next++;
pos = next - data;
- if (*next == ';') { // read another possibility
+ if (*next == ';' || *next == ',') { // read another possibility
glyph_name = NEXT_GLYPH_NAME(glyph_name);
- // XXX given "DDDD;EEEE EEEE;FFFF", will not store "FFFF"
+ // XXX given "DDDD,EEEE EEEE,FFFF", will not store "FFFF"
goto read_uni;
}
} else
@@ -136,7 +137,8 @@ DvipsEncoding::glyphname_unicode(const String &gn, bool *more)
DvipsEncoding::DvipsEncoding()
- : _boundary_char(-1), _altselector_char(-1), _unicoding_map(-1)
+ : _boundary_char(-1), _altselector_char(-1), _unicoding_map(-1),
+ _warn_missing(false)
{
}
@@ -275,6 +277,13 @@ comment_tokenize(const String &s, int &pos_in, int &line)
}
}
+static bool
+retokenize_isword(char c)
+{
+ return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')
+ || (c >= '0' && c <= '9') || c == '.' || c == '_';
+}
+
static struct { const char *s; int v; } ligkern_ops[] = {
{ "=:", DvipsEncoding::JL_LIG }, { "|=:", DvipsEncoding::JL_CLIG },
@@ -406,14 +415,14 @@ DvipsEncoding::parse_ligkern_words(Vector<String> &v, int override, ErrorHandler
return 0;
} else
- return errh->error("parse error in LIGKERN");
+ return -EPARSE;
}
int
DvipsEncoding::parse_position_words(Vector<String> &v, int override, ErrorHandler *errh)
{
if (v.size() != 4)
- return errh->error("parse error in POSITION");
+ return -EPARSE;
int c = encoding_of(v[0], override > 0);
if (c < 0)
@@ -441,7 +450,7 @@ DvipsEncoding::parse_unicoding_words(Vector<String> &v, int override, ErrorHandl
{
int av;
if (v.size() < 2 || (v[1] != "=" && v[1] != "=:" && v[1] != ":="))
- return errh->error("parse error in UNICODING");
+ return -EPARSE;
else if (v[0] == "||" || (av = encoding_of(v[0])) < 0)
return errh->error("target '%s' has no encoding, ignoring UNICODING", v[0].c_str());
@@ -474,8 +483,46 @@ DvipsEncoding::parse_unicoding_words(Vector<String> &v, int override, ErrorHandl
return 0;
}
+const DvipsEncoding::WordType DvipsEncoding::word_types[] = {
+ { "LIGKERN", &DvipsEncoding::parse_ligkern_words },
+ { "POSITION", &DvipsEncoding::parse_position_words },
+ { "UNICODING", &DvipsEncoding::parse_unicoding_words }
+};
+
+void
+DvipsEncoding::parse_word_group(Vector<String> &words, int override, int wt, ErrorHandler *errh)
+{
+ if (words.size() > 0) {
+ int (DvipsEncoding::*method)(Vector<String> &, int, ErrorHandler *) = word_types[wt].parsefunc;
+ if ((this->*method)(words, override, errh) == -EPARSE) {
+ Vector<String> rewords;
+ for (String *sp = words.begin(); sp != words.end(); sp++) {
+ const char *s = sp->begin(), *ends = sp->end();
+ while (s != ends) {
+ const char *word = s;
+ if (*s == '{') {
+ for (s++; s != ends && *s != '}'; s++)
+ /* nada */;
+ if (s != ends)
+ s++;
+ } else {
+ bool x = retokenize_isword(*s);
+ for (s++; s != ends && x == retokenize_isword(*s); s++)
+ /* nada */;
+ }
+ rewords.push_back(sp->substring(word, s));
+ }
+ }
+ if ((this->*method)(rewords, override, errh) == -EPARSE)
+ errh->error("parse error in %s", word_types[wt].name);
+
+ }
+ words.clear();
+ }
+}
+
int
-DvipsEncoding::parse_words(const String &s, int override, int (DvipsEncoding::*method)(Vector<String> &, int, ErrorHandler *), ErrorHandler *errh)
+DvipsEncoding::parse_words(const String &s, int override, int wt, ErrorHandler *errh)
{
Vector<String> words;
const char *data = s.data();
@@ -488,15 +535,11 @@ DvipsEncoding::parse_words(const String &s, int override, int (DvipsEncoding::*m
data++;
if (data == first) {
data++; // step past semicolon (or harmlessly past EOS)
- if (words.size() > 0) {
- (this->*method)(words, override, errh);
- words.clear();
- }
+ parse_word_group(words, override, wt, errh);
} else
words.push_back(s.substring(first, data));
}
- if (words.size() > 0)
- (this->*method)(words, override, errh);
+ parse_word_group(words, override, wt, errh);
return 0;
}
@@ -506,6 +549,22 @@ landmark(const String &filename, int line)
return filename + String::stable_string(":", 1) + String(line);
}
+static String
+trim_space(const String &s, int pos)
+{
+ while (pos < s.length() && isspace(s[pos]))
+ pos++;
+ int epos = s.length();
+ for (int x = 0; x < 2; x++) {
+ while (epos > pos && isspace(s[epos - 1]))
+ epos--;
+ if (epos == pos || s[epos - 1] != ';')
+ break;
+ epos--;
+ }
+ return s.substring(pos, epos - pos);
+}
+
int
DvipsEncoding::parse(String filename, bool ignore_ligkern, bool ignore_other, ErrorHandler *errh)
{
@@ -543,40 +602,34 @@ DvipsEncoding::parse(String filename, bool ignore_ligkern, bool ignore_other, Er
&& isspace(token[7])
&& !ignore_ligkern) {
lerrh.set_landmark(landmark(filename, line));
- parse_words(token.substring(8), 1, &DvipsEncoding::parse_ligkern_words, &lerrh);
+ parse_words(token.substring(8), 1, WT_LIGKERN, &lerrh);
} else if (token.length() >= 9
&& memcmp(token.data(), "LIGKERNX", 8) == 0
&& isspace(token[8])
&& !ignore_ligkern) {
lerrh.set_landmark(landmark(filename, line));
- parse_words(token.substring(9), 1, &DvipsEncoding::parse_ligkern_words, &lerrh);
+ parse_words(token.substring(9), 1, WT_LIGKERN, &lerrh);
} else if (token.length() >= 10
&& memcmp(token.data(), "UNICODING", 9) == 0
&& isspace(token[9])
&& !ignore_other) {
lerrh.set_landmark(landmark(filename, line));
- parse_words(token.substring(10), 1, &DvipsEncoding::parse_unicoding_words, &lerrh);
+ parse_words(token.substring(10), 1, WT_UNICODING, &lerrh);
} else if (token.length() >= 9
&& memcmp(token.data(), "POSITION", 8) == 0
&& isspace(token[8])
&& !ignore_other) {
lerrh.set_landmark(landmark(filename, line));
- parse_words(token.substring(9), 1, &DvipsEncoding::parse_position_words, &lerrh);
+ parse_words(token.substring(9), 1, WT_POSITION, &lerrh);
} else if (token.length() >= 13
&& memcmp(token.data(), "CODINGSCHEME", 12) == 0
&& isspace(token[12])
&& !ignore_other) {
- int p = 13;
- while (p < token.length() && isspace(token[p]))
- p++;
- int pp = token.length() - 1;
- while (pp > p && isspace(token[pp]))
- pp--;
- _coding_scheme = token.substring(p, pp - p);
+ _coding_scheme = trim_space(token, 13);
if (_coding_scheme.length() > 39)
lerrh.lwarning(landmark(filename, line), "only first 39 chars of CODINGSCHEME are significant");
if (std::find(_coding_scheme.begin(), _coding_scheme.end(), '(') < _coding_scheme.end()
@@ -584,6 +637,18 @@ DvipsEncoding::parse(String filename, bool ignore_ligkern, bool ignore_other, Er
lerrh.lerror(landmark(filename, line), "CODINGSCHEME cannot contain parentheses");
_coding_scheme = String();
}
+
+ } else if (token.length() >= 11
+ && memcmp(token.data(), "WARNMISSING", 11) == 0
+ && (token.length() == 11 || isspace(token[11]))
+ && !ignore_other) {
+ String value = trim_space(token, 11);
+ if (value == "1" || value == "yes" || value == "true" || !value)
+ _warn_missing = true;
+ else if (value == "0" || value == "no" || value == "false")
+ _warn_missing = false;
+ else
+ lerrh.lerror(landmark(filename, line), "WARNMISSING command not understood");
}
return 0;
@@ -592,23 +657,23 @@ DvipsEncoding::parse(String filename, bool ignore_ligkern, bool ignore_other, Er
int
DvipsEncoding::parse_ligkern(const String &ligkern_text, int override, ErrorHandler *errh)
{
- return parse_words(ligkern_text, override, &DvipsEncoding::parse_ligkern_words, errh);
+ return parse_words(ligkern_text, override, WT_LIGKERN, errh);
}
int
DvipsEncoding::parse_position(const String &position_text, int override, ErrorHandler *errh)
{
- return parse_words(position_text, override, &DvipsEncoding::parse_position_words, errh);
+ return parse_words(position_text, override, WT_POSITION, errh);
}
int
DvipsEncoding::parse_unicoding(const String &unicoding_text, int override, ErrorHandler *errh)
{
- return parse_words(unicoding_text, override, &DvipsEncoding::parse_unicoding_words, errh);
+ return parse_words(unicoding_text, override, WT_UNICODING, errh);
}
void
-DvipsEncoding::bad_codepoint(int code)
+DvipsEncoding::bad_codepoint(int code, Metrics &metrics, Vector<String> &unencoded)
{
for (int i = 0; i < _lig.size(); i++) {
Ligature &l = _lig[i];
@@ -617,6 +682,18 @@ DvipsEncoding::bad_codepoint(int code)
else if ((l.join & JT_ADDLIG) && l.d == code)
l.join &= ~JT_LIGALL;
}
+
+ if (_warn_missing) {
+ Vector<uint32_t> unicodes;
+ bool unicodes_explicit = x_unicodes(_e[code], unicodes);
+ if (!unicodes_explicit || unicodes.size() > 0) {
+ Vector<Setting> v;
+ v.push_back(Setting(Setting::RULE, 500, 500));
+ v.push_back(Setting(Setting::SPECIAL, String("Warning: missing glyph '") + _e[code] + "'"));
+ metrics.encode_virtual(code, _e[code], 0, v);
+ unencoded.push_back(_e[code]);
+ }
+ }
}
static inline Efont::OpenType::Glyph
@@ -654,16 +731,12 @@ DvipsEncoding::x_unicodes(PermString chname, Vector<uint32_t> &unicodes) const
void
-DvipsEncoding::make_metrics(Metrics &metrics, const Efont::OpenType::Cmap &cmap, Efont::Cff::Font *font, Secondary *secondary, bool literal, ErrorHandler *errh)
+DvipsEncoding::make_metrics(Metrics &metrics, const FontInfo &finfo, Secondary *secondary, bool literal, ErrorHandler *errh)
{
// first pass: without secondaries
for (int code = 0; code < _e.size(); code++) {
PermString chname = _e[code];
- // the altselector character has its own glyph name
- if (code == _altselector_char && !literal)
- chname = "altselector";
-
// common case: skip .notdef
if (chname == dot_notdef)
continue;
@@ -676,13 +749,11 @@ DvipsEncoding::make_metrics(Metrics &metrics, const Efont::OpenType::Cmap &cmap,
Efont::OpenType::Glyph glyph = 0;
uint32_t glyph_uni = (unicodes.size() ? unicodes[0] : 0);
for (uint32_t *u = unicodes.begin(); u < unicodes.end() && !glyph; u++)
- if ((glyph = map_uni(*u, cmap, metrics)) > 0)
+ if ((glyph = map_uni(*u, *finfo.cmap, metrics)) > 0)
glyph_uni = *u;
// find named glyph, if any
- Efont::OpenType::Glyph named_glyph = 0;
- if (font)
- named_glyph = font->glyphid(chname);
+ Efont::OpenType::Glyph named_glyph = finfo.glyphid(chname);
// do not use a Unicode-mapped glyph if literal
if (literal)
@@ -706,23 +777,17 @@ DvipsEncoding::make_metrics(Metrics &metrics, const Efont::OpenType::Cmap &cmap,
PermString chname = _e[code];
- // the altselector character has its own glyph name
- if (code == _altselector_char && !literal)
- chname = "altselector";
-
// find all Unicodes
Vector<uint32_t> unicodes;
bool unicodes_explicit = x_unicodes(chname, unicodes);
// find named glyph, if any
- Efont::OpenType::Glyph named_glyph = 0;
- if (font)
- named_glyph = font->glyphid(chname);
+ Efont::OpenType::Glyph named_glyph = finfo.glyphid(chname);
// 1. We were not able to find the glyph using Unicode.
// 2. There might be a named_glyph.
// May need to try secondaries later. Store this slot.
- // Try secondaries, if there is no named_glyph, or explicit unicoding.
+ // Try secondaries, if there's explicit unicoding or no named_glyph.
if (unicodes_explicit || named_glyph <= 0)
for (uint32_t *u = unicodes.begin(); u < unicodes.end(); u++)
if (secondary->encode_uni(code, chname, *u, metrics, errh))
@@ -742,10 +807,33 @@ DvipsEncoding::make_metrics(Metrics &metrics, const Efont::OpenType::Cmap &cmap,
/* all set */;
}
+ // add altselector
+ if (_altselector_char >= 0 && _altselector_char < _e.size()) {
+ metrics.add_altselector_code(_altselector_char, 0);
+ if (metrics.glyph(_altselector_char) <= 0 && !literal)
+ (void) secondary->encode_uni(_altselector_char, "altselector", U_ALTSELECTOR, metrics, errh);
+ }
+
// final pass: complain
+ Vector<String> unencoded;
for (int code = 0; code < _e.size(); code++)
if (_e[code] != dot_notdef && metrics.glyph(code) <= 0)
- bad_codepoint(code);
+ bad_codepoint(code, metrics, unencoded);
+
+ if (unencoded.size() == 1) {
+ errh->warning("'%s' glyph not found in font", unencoded[0].c_str());
+ errh->message("(This glyph will appear as a blot and cause warnings if used.)");
+ } else if (unencoded.size() > 1) {
+ std::sort(unencoded.begin(), unencoded.end());
+ StringAccum sa;
+ for (const String* a = unencoded.begin(); a < unencoded.end(); a++)
+ sa << *a << ' ';
+ sa.pop_back();
+ sa.append_break_lines(sa.take_string(), 68, " ");
+ sa.pop_back();
+ errh->warning("%d glyphs not found in font:", unencoded.size());
+ errh->message("%s\n(These glyphs will appear as blots and cause warnings if used.)", sa.c_str());
+ }
metrics.set_coding_scheme(_coding_scheme);
}
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.hh b/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.hh
index 7c366083f10..831873675b6 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.hh
+++ b/Build/source/utils/lcdf-typetools/otftotfm/dvipsencoding.hh
@@ -5,12 +5,13 @@
#include <lcdf/hashmap.hh>
class Metrics;
class Secondary;
+class FontInfo;
class DvipsEncoding { public:
DvipsEncoding();
- static int parse_glyphlist(String);
+ static int add_glyphlist(String);
static int glyphname_unicode(const String &, bool *more = 0);
static void glyphname_unicode(String, Vector<int> &, bool *more = 0);
@@ -20,6 +21,7 @@ class DvipsEncoding { public:
int boundary_char() const { return _boundary_char; }
const String &coding_scheme() const { return _coding_scheme; }
void set_coding_scheme(const String &s) { _coding_scheme = s; }
+ void set_warn_missing(bool wm) { _warn_missing = wm; }
void encode(int, PermString);
inline int encoding_of(PermString) const;
@@ -35,7 +37,7 @@ class DvipsEncoding { public:
bool file_had_ligkern() const { return _file_had_ligkern; }
// also modifies 'this':
- void make_metrics(Metrics &, const Efont::OpenType::Cmap &, Efont::Cff::Font *, Secondary *, bool literal, ErrorHandler *);
+ void make_metrics(Metrics &, const FontInfo &, Secondary *, bool literal, ErrorHandler *);
void apply_ligkern_lig(Metrics &, ErrorHandler *) const;
void apply_ligkern_kern(Metrics &, ErrorHandler *) const;
@@ -73,13 +75,23 @@ class DvipsEncoding { public:
String _initial_comment;
String _final_text;
bool _file_had_ligkern;
+ bool _warn_missing;
+
+ struct WordType {
+ const char *name;
+ int (DvipsEncoding::*parsefunc)(Vector<String>&, int, ErrorHandler*);
+ };
+ static const WordType word_types[];
+ enum { WT_LIGKERN = 0, WT_POSITION, WT_UNICODING };
void add_ligkern(const Ligature &, int override);
+ enum { EPARSE = 90000 };
int parse_ligkern_words(Vector<String> &, int override, ErrorHandler *);
int parse_position_words(Vector<String> &, int override, ErrorHandler *);
int parse_unicoding_words(Vector<String> &, int override, ErrorHandler *);
- int parse_words(const String &, int override, int (DvipsEncoding::*)(Vector<String> &, int, ErrorHandler *), ErrorHandler *);
- void bad_codepoint(int);
+ void parse_word_group(Vector<String> &, int override, int wt, ErrorHandler *);
+ int parse_words(const String &, int override, int wt, ErrorHandler *);
+ void bad_codepoint(int, Metrics &, Vector<String> &);
bool x_unicodes(PermString chname, Vector<uint32_t> &unicodes) const;
static PermString dot_notdef;
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/glyphfilter.cc b/Build/source/utils/lcdf-typetools/otftotfm/glyphfilter.cc
index 6bced191cb6..832061e7782 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/glyphfilter.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/glyphfilter.cc
@@ -1,6 +1,6 @@
/* glyphfilter.{cc,hh} -- define subsets of characters
*
- * Copyright (c) 2004-2005 Eddie Kohler
+ * Copyright (c) 2004-2006 Eddie Kohler
*
* This program 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
@@ -66,7 +66,7 @@ GlyphFilter::allow(Efont::OpenType::Glyph glyph, const Vector<PermString>& glyph
return false;
}
}
-
+
return !any_includes || included;
}
@@ -129,15 +129,15 @@ GlyphFilter::add_pattern(const String& pattern, int ptype, ErrorHandler* errh)
// unicode values
{
const char* dash = std::find(begin, word, '-');
- if (parse_unicode_number(begin, dash, 1, p.u.unirange.low)) {
+ if (parse_unicode_number(begin, dash, 2, p.u.unirange.low)) {
if (dash == word)
p.u.unirange.high = p.u.unirange.low;
else if (dash == word - 1)
p.u.unirange.high = 0xFFFFFFFFU;
- else if (parse_unicode_number(dash + 1, word, 0, p.u.unirange.high))
+ else if (parse_unicode_number(dash + 1, word, (begin[0] == 'U' ? 1 : 0), p.u.unirange.high))
/* do nothing */;
else
- goto next_clause; // without adding pattern
+ goto name_pattern; // assume it's a name
p.data = D_UNIRANGE;
_patterns.push_back(p);
goto next_clause;
@@ -145,6 +145,7 @@ GlyphFilter::add_pattern(const String& pattern, int ptype, ErrorHandler* errh)
}
// otherwise must be name pattern
+ name_pattern:
p.data = D_NAME;
p.pattern = pattern.substring(begin, word);
_patterns.push_back(p);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.c b/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.c
index dd5cad6f7f1..586c23e5f07 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.c
+++ b/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.c
@@ -1,6 +1,6 @@
/* kpseinterface.{c,h} -- interface with the kpathsea library
*
- * Copyright (c) 2003 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -56,8 +56,18 @@ kpsei_find_file(const char* name, int format)
return kpse_find_file(name, kpse_tex_ps_header_format, true);
case KPSEI_FMT_TYPE1:
return kpse_find_file(name, kpse_type1_format, false);
+ case KPSEI_FMT_TYPE42:
+ return kpse_find_file(name, kpse_type42_format, false);
+ case KPSEI_FMT_TRUETYPE:
+ return kpse_find_file(name, kpse_truetype_format, false);
+#if HAVE_DECL_KPSE_OPENTYPE_FORMAT
+ case KPSEI_FMT_OPENTYPE:
+ return kpse_find_file(name, kpse_opentype_format, false);
+#endif
case KPSEI_FMT_OTHER_TEXT:
return kpse_find_file(name, kpse_program_text_format, true);
+ case KPSEI_FMT_MAP:
+ return kpse_find_file(name, kpse_fontmap_format, true);
default:
return 0;
}
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.h b/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.h
index 52abdc12bb5..0809059437b 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.h
+++ b/Build/source/utils/lcdf-typetools/otftotfm/kpseinterface.h
@@ -8,7 +8,8 @@ void kpsei_init(const char* argv0, const char* progname);
extern int kpsei_env_sep_char;
char* kpsei_path_expand(const char* path); /* free() result */
enum { KPSEI_FMT_WEB2C, KPSEI_FMT_ENCODING, KPSEI_FMT_TYPE1,
- KPSEI_FMT_OTHER_TEXT };
+ KPSEI_FMT_OTHER_TEXT, KPSEI_FMT_MAP, KPSEI_FMT_TRUETYPE,
+ KPSEI_FMT_OPENTYPE, KPSEI_FMT_TYPE42 };
char* kpsei_find_file(const char* name, int format);
void kpsei_set_debug_flags(unsigned flags);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/metrics.cc b/Build/source/utils/lcdf-typetools/otftotfm/metrics.cc
index ff0fb6575f3..901638beeb8 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/metrics.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/metrics.cc
@@ -1,6 +1,6 @@
/* metrics.{cc,hh} -- an encoding during and after OpenType features
*
- * Copyright (c) 2003-2005 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -23,7 +23,7 @@
#include <algorithm>
#include <lcdf/straccum.hh>
-Metrics::Metrics(Efont::CharstringProgram *font, int nglyphs)
+Metrics::Metrics(const Efont::CharstringProgram *font, int nglyphs)
: _boundary_glyph(nglyphs), _emptyslot_glyph(nglyphs + 1),
_design_units(1000), _liveness_marked(false)
{
@@ -38,7 +38,7 @@ Metrics::~Metrics()
}
int
-Metrics::add_mapped_font(Efont::CharstringProgram *font, const String &name)
+Metrics::add_mapped_font(const Efont::CharstringProgram *font, const String &name)
{
_mapped_fonts.push_back(font);
_mapped_font_names.push_back(name);
@@ -1131,11 +1131,8 @@ Metrics::shrink_encoding(int size, const DvipsEncoding &dvipsenc, ErrorHandler *
&& dvipsenc.encoded(c) == (bool) want_encoded)
empty_codes.push_back(c);
- /* Then, loop over the unencoded characters, assigning them codes. */
+ /* Then, assign codes to the unencoded characters. */
int nunencoded = 0;
- Code *holes[4], *end_hole;
- holes[1] = holes[2] = holes[3] = empty_codes.begin();
- end_hole = empty_codes.end();
for (Slot *slot = slots.begin(); slot != slots.end(); slot++) {
if (slot->new_code >= 0)
@@ -1144,29 +1141,28 @@ Metrics::shrink_encoding(int size, const DvipsEncoding &dvipsenc, ErrorHandler *
int needs = (_encoding[slot->old_code].visible_base() ? 1 : 0)
+ (_encoding[slot->old_code].flag(Char::LIVE) ? 2 : 0);
assert(needs > 0);
- Code **hole;
-
- for (hole = &holes[needs]; *hole < end_hole; (*hole)++) {
- int haves = (!_encoding[**hole].base_code >= 0 ? 1 : 0)
- + (!_encoding[**hole].visible() ? 2 : 0);
+
+ Code dest = -1;
+ for (Code *h = empty_codes.begin(); h < empty_codes.end() && dest < 0; h++) {
+ int haves = (_encoding[*h].base_code < 0 ? 1 : 0)
+ + (!_encoding[*h].visible() ? 2 : 0);
if ((needs & haves) == needs)
- break;
+ dest = *h;
}
- if (*hole < end_hole) {
+ if (dest >= 0) {
if (needs & 2) {
- assert(!_encoding[**hole].visible());
- _encoding[**hole].swap(_encoding[slot->old_code]);
- slot->new_code = **hole;
+ assert(!_encoding[dest].visible());
+ _encoding[dest].swap(_encoding[slot->old_code]);
+ slot->new_code = dest;
} else {
- _encoding[slot->old_code].base_code = **hole;
+ _encoding[slot->old_code].base_code = dest;
slot->new_code = slot->old_code;
}
if (needs & 1) {
- assert(_encoding[**hole].base_code < 0 || _encoding[**hole].base_code == slot->old_code);
- _encoding[**hole].base_code = slot->old_code;
+ assert(_encoding[dest].base_code < 0 || _encoding[dest].base_code == slot->old_code);
+ _encoding[dest].base_code = slot->old_code;
}
- (*hole)++;
} else
nunencoded++;
}
@@ -1244,7 +1240,8 @@ Metrics::need_virtual(int size) const
if (size > _encoding.size())
size = _encoding.size();
for (const Char *ch = _encoding.begin(); ch < _encoding.begin() + size; ch++)
- if (ch->pdx || ch->pdy || ch->adx || ch->virtual_char)
+ if (ch->glyph /* actually encoded */
+ && (ch->pdx || ch->pdy || ch->adx || ch->virtual_char))
return true;
return false;
}
@@ -1269,6 +1266,7 @@ Metrics::setting(Code code, Vector<Setting> &v, SettingMode sm) const
case Setting::RULE:
case Setting::PUSH:
case Setting::POP:
+ case Setting::SPECIAL:
v.push_back(*s);
break;
case Setting::FONT:
@@ -1397,6 +1395,9 @@ Metrics::unparse() const
case Setting::POP:
fprintf(stderr, " )");
break;
+ case Setting::SPECIAL:
+ fprintf(stderr, " S{%s}", s->s.c_str());
+ break;
}
fprintf(stderr, " ((%d/%s, %d/%s))\n", ch.built_in1, code_str(ch.built_in1), ch.built_in2, code_str(ch.built_in2));
}
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/metrics.hh b/Build/source/utils/lcdf-typetools/otftotfm/metrics.hh
index afd58e98bd8..de5003b65c8 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/metrics.hh
+++ b/Build/source/utils/lcdf-typetools/otftotfm/metrics.hh
@@ -7,13 +7,15 @@ class DvipsEncoding;
class GlyphFilter;
struct Setting {
- enum { NONE, FONT, SHOW, KERN, MOVE, RULE, PUSH, POP, DEAD };
+ enum { NONE, FONT, SHOW, KERN, MOVE, RULE, PUSH, POP, SPECIAL, DEAD };
int op;
int x;
int y;
+ String s;
Setting(int op_in, int x_in = 0, int y_in = 0)
: op(op_in), x(x_in), y(y_in) { }
- bool valid_op() const { return op >= FONT && op <= POP; }
+ Setting(int op_in, const String &s_in) : op(op_in), s(s_in) { }
+ bool valid_op() const { return op >= FONT && op <= SPECIAL; }
};
class Metrics { public:
@@ -25,7 +27,7 @@ class Metrics { public:
typedef Efont::OpenType::Substitution Substitution;
typedef Efont::OpenType::Positioning Positioning;
- Metrics(Efont::CharstringProgram *, int nglyphs);
+ Metrics(const Efont::CharstringProgram *, int nglyphs);
~Metrics();
void check() const;
@@ -40,9 +42,9 @@ class Metrics { public:
void set_design_units(int du) { _design_units = du; }
int n_mapped_fonts() const { return _mapped_fonts.size();}
- Efont::CharstringProgram *mapped_font(int i) const { return _mapped_fonts[i]; }
+ const Efont::CharstringProgram *mapped_font(int i) const { return _mapped_fonts[i]; }
const String &mapped_font_name(int i) const { return _mapped_font_names[i]; }
- int add_mapped_font(Efont::CharstringProgram *, const String &);
+ int add_mapped_font(const Efont::CharstringProgram *, const String &);
inline int encoding_size() const { return _encoding.size(); }
inline bool valid_code(Code) const;
@@ -156,7 +158,7 @@ class Metrics { public:
bool _liveness_marked : 1;
- Vector<Efont::CharstringProgram *> _mapped_fonts;
+ Vector<const Efont::CharstringProgram *> _mapped_fonts;
Vector<String> _mapped_font_names;
Metrics(const Metrics &); // does not exist
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.1 b/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.1
index a5450d3e290..179ed4e8db9 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.1
+++ b/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.1
@@ -1,5 +1,5 @@
'\"t
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -12,23 +12,25 @@
..
.TH OTFTOTFM 1 "LCDF Typetools" "Version \*V"
.SH NAME
-otftotfm \- create TeX font metrics from PostScript OpenType fonts
+otftotfm \- create TeX font metrics from OpenType fonts
.SH SYNOPSIS
.B otftotfm
\%[\fB\-a\fR]
\%[\fBoptions\fR]
-\%\fIfontfile\fR.otf [\fItexname\fR]
+\%\fIfontfile\fR [\fItexname\fR]
'
.SH DESCRIPTION
.BR Otftotfm
creates the font metric and encoding files required to use an OpenType font
-with TeX. You supply an OpenType ".otf" font file, a base ".enc" encoding,
+with TeX. You supply an OpenType ".otf" or ".ttf" font file,
+a base ".enc" encoding,
and a TeX name "\fItexname\fR" for the resulting font, and say which
OpenType features should be turned on. Then
.B otftotfm
-generates and installs the corresponding TeX-related metric files
-(".tfm" TeX font metrics, ".vf" virtual fonts, and ".enc"
-encoding files). It only works on PostScript-flavored OpenType fonts.
+generates and installs the corresponding TeX-related metric files (".tfm"
+TeX font metrics, ".vf" virtual fonts, and ".enc" encoding files). It
+works on both PostScript-flavored and TrueType-flavored OpenType fonts,
+although TrueType-flavor support will only work easily with pdftex.
.LP
The easiest way to use
.B otftotfm
@@ -39,7 +41,7 @@ option; see Automatic Mode below. Without
.B otftotfm
writes all its output files to the current directory.
.LP
-After running "\fBotftotfm\fR \fIfontfile\fR.otf \fItexname\fR" and
+After running "\fBotftotfm\fR \fIfontfile\fR \fItexname\fR" and
installing the results (manually or with
.BR \-a ),
you can use the OpenType font in plain TeX with a command like this:
@@ -74,7 +76,7 @@ capitals; "\fB\-f\fRswsh", for swash variants; and "\fB\-f\fRcswh", for
contextual swash. See the FEATURE DIRECTORY section below for more. The
.M otfinfo 1
program will report which features a font supports; run "\fBotfinfo\fR
-\fB\-f\fR \fIfontfile\fR.otf".
+\fB\-f\fR \fIfontfile\fR".
'
.PP
Feature options can also apply a feature to a subset of characters in the
@@ -110,7 +112,7 @@ and run
.M mktexlsr 1 .)
You can then run "\fBotftotfm\fR
.B \-a
-.IR file .otf
+.IR fontfile
.IR texname \&"
and immediately refer to the font in TeX using the
.I texname
@@ -127,13 +129,12 @@ installs files under that directory tree as follows:
.TS
l l l .
\fBFile type\fR \fBDirectory\fR \fBFilename\fR
-TFM TEXMF/fonts/tfm/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR[--base].tfm
+TFM TEXMF/fonts/tfm/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR[\-\-base].tfm
VF TEXMF/fonts/vf/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR.vf
-PL TEXMF/fonts/pl/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR[--base].pl
+PL TEXMF/fonts/pl/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR[\-\-base].pl
VPL TEXMF/fonts/vpl/\fIvendor\fR/\fItypeface\fR/ \fItexname\fR.vpl
encoding TEXMF/fonts/enc/dvips/\fIvendor\fR/ a_\fIsignature\fR.enc
or TEXMF/dvips/\fIvendor\fR/
-PFB font TEXMF/fonts/type1/\fIvendor\fR/\fItypeface\fR/ \fIPStexname\fR.pfb
font map TEXMF/fonts/map/dvips/\fIvendor\fR/ \fIvendor\fR.map
or TEXMF/dvips/\fIvendor\fR/
.TE
@@ -141,15 +142,26 @@ font map TEXMF/fonts/map/dvips/\fIvendor\fR/ \fIvendor\fR.map
"TEXMF" stands for the writable TEXMF directory. \fITexname\fR is the
font name supplied as
.BR otftotfm 's
-second argument, and \fIPStexname\fR is the PostScript name of the input
-font. The \fIvendor\fR and \fItypeface\fR strings are required by TDS;
-they default to "lcdftools" and the font's family name, respectively, but
-see the
+second argument. The \fIvendor\fR and \fItypeface\fR strings are required
+by TDS; they default to "lcdftools" and the font's family name,
+respectively, but see the
.B \-\-vendor
and
.B \-\-typeface
options. \fISignature\fR is an opaque 6-character encoding signature.
.PP
+.B Otftotfm
+also installs a version of the font suitable for printing.
+PostScript-flavored OpenType fonts are translated to Type 1 format and
+installed as PFB fonts; TrueType-flavored fonts are installed as is (pdftex
+and pdflatex can read TrueType directly). The installation paths are as
+follows; \fIPSname\fR is the font's PostScript name.
+.TS
+l l l .
+PFB TEXMF/fonts/type1/\fIvendor\fR/\fItypeface\fR/ \fIPSname\fR.pfb
+TrueType TEXMF/fonts/truetype/\fIvendor\fR/\fItypeface\fR/ \fIfontfile\fR
+.TE
+.PP
You can override these directories with environment variables and options
as follows. Options take precedence over environment variables.
'
@@ -161,7 +173,8 @@ VF VFDESTDIR \-\-vf\-directory
PL PLDESTDIR \-\-pl\-directory
VPL VPLDESTDIR \-\-vpl\-directory
encoding ENCODINGDESTDIR \-\-encoding\-directory
-PFB font T1DESTDIR \-\-type1\-directory
+PFB T1DESTDIR \-\-type1\-directory
+TrueType TRUETYPEDESTDIR \-\-truetype\-directory
font map \- \-\-map\-file
.TE
.PP
@@ -207,37 +220,37 @@ for the first set of fonts. Note the "\fB\-f\fRkern \fB\-f\fRliga"
options, which access pair kerns and the default "f" ligatures.
.Sp
.nf
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Regular.otf \e
- \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-Regular
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-It.otf \e
- \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-It
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Semibold.otf \e
- \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-Semibold
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-SemiboldIt.otf \e
- \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-SemiboldIt
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Bold.otf \e
- \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-Bold
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-BoldIt.otf \e
- \fB\-f\fRkern \fB\-f\fRliga LY1--MinionPro-BoldIt
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-Regular.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga LY1\-\-MinionPro\-Regular
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-It.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga LY1\-\-MinionPro\-It
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-Semibold.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga LY1\-\-MinionPro\-Semibold
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-SemiboldIt.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga LY1\-\-MinionPro\-SemiboldIt
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-Bold.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga LY1\-\-MinionPro\-Bold
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-BoldIt.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga LY1\-\-MinionPro\-BoldIt
.fi
.Sp
The small-caps fonts are generated with an additional "\fB\-f\fRsmcp"
-option. We append "--fsmcp" to the font metric names as well,
+option. We append "\-\-fsmcp" to the font metric names as well,
differentiating them from the regular fonts. Although MinionPro's italic
fonts support small-caps, the LaTeX font selection scheme can't access them
easily, so we've left them off.
.Sp
.nf
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Regular.otf \e
- \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1--MinionPro-Regular--fsmcp
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Semibold.otf \e
- \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1--MinionPro-Semibold--fsmcp
- \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro-Bold.otf \e
- \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1--MinionPro-Bold--fsmcp
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-Regular.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1\-\-MinionPro-Regular\-\-fsmcp
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-Semibold.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1\-\-MinionPro\-Semibold\-\-fsmcp
+ \fBotftotfm\fR \fB\-a\fR \fB\-e\fR texnansx MinionPro\-Bold.otf \e
+ \fB\-f\fRkern \fB\-f\fRliga \fB\-f\fRsmcp LY1\-\-MinionPro\-Bold\-\-fsmcp
.fi
.Sp
To get old-style numerals, just add the "\fB\-f\fRonum" option to each
-invocation -- and, to reduce confusion, append "--fonum" to the font metric
+invocation -- and, to reduce confusion, append "\-\-fonum" to the font metric
names.
.PP
At this point, all our font metric files are installed, and it's finally
@@ -249,21 +262,21 @@ Let's call the LaTeX font family "MinionPro". Then the ".fd" file is
.nf
\eDeclareFontFamily{LY1}{MinionPro}{}
\eDeclareFontShape{LY1}{MinionPro}{m}{n}%
- { <\-> LY1--MinionPro-Regular }{}
- \eDeclareFontShape{LY1}{MinionPro}{m}{it}{ <\-> LY1--MinionPro-It }{}
+ { <\-> LY1\-\-MinionPro\-Regular }{}
+ \eDeclareFontShape{LY1}{MinionPro}{m}{it}{ <\-> LY1\-\-MinionPro\-It }{}
\eDeclareFontShape{LY1}{MinionPro}{m}{sc}%
- { <\-> LY1--MinionPro-Regular--fsmcp }{}
+ { <\-> LY1\-\-MinionPro\-Regular\-\-fsmcp }{}
\eDeclareFontShape{LY1}{MinionPro}{sb}{n}%
- { <\-> LY1--MinionPro-Semibold }{}
+ { <\-> LY1\-\-MinionPro\-Semibold }{}
\eDeclareFontShape{LY1}{MinionPro}{sb}{it}%
- { <\-> LY1--MinionPro-SemiboldIt }{}
+ { <\-> LY1\-\-MinionPro\-SemiboldIt }{}
\eDeclareFontShape{LY1}{MinionPro}{sb}{sc}%
- { <\-> LY1--MinionPro-Semibold--fsmcp }{}
- \eDeclareFontShape{LY1}{MinionPro}{b}{n}{ <\-> LY1--MinionPro-Bold }{}
+ { <\-> LY1\-\-MinionPro\-Semibold\-\-fsmcp }{}
+ \eDeclareFontShape{LY1}{MinionPro}{b}{n}{ <\-> LY1\-\-MinionPro-Bold }{}
\eDeclareFontShape{LY1}{MinionPro}{b}{it}%
- { <\-> LY1--MinionPro-BoldIt }{}
+ { <\-> LY1\-\-MinionPro\-BoldIt }{}
\eDeclareFontShape{LY1}{MinionPro}{b}{sc}%
- { <\-> LY1--MinionPro-Bold--fsmcp }{}
+ { <\-> LY1\-\-MinionPro\-Bold\-\-fsmcp }{}
\eDeclareFontShape{LY1}{MinionPro}{bx}{n}%
{ <\-> ssub * MinionPro/b/n }{}
\eDeclareFontShape{LY1}{MinionPro}{bx}{it}%
@@ -357,13 +370,13 @@ option acts like
.B \-\-clear\-subs
followed by
.BI \-\-include\-subs " pattern\fR. "
-For pattern syntax, see CHARACTER PATTERNS, below.
+For pattern syntax, see GLYPH PATTERNS, below.
.Sp
-In the command line below, the '<Number>' pattern will force the "onum"
+In the command line below, the \&'<Number>' pattern will force the "onum"
feature to substitute only numbers (and not, for example, punctuation).
The "salt" feature can still substitute any character.
.nf
- \fBotftotfm\fR \fB\-f\fRsalt \fB\-\-include\-subs\fR='<Number>' \fB\-f\fRonum \.\.\.
+ \fBotftotfm\fR \fB\-f\fRsalt \fB\-\-include\-subs\fR="<Number>" \fB\-f\fRonum \.\.\.
.fi
'
.Sp
@@ -464,71 +477,6 @@ for more information.
'
.Sp
.TP 5
-.BI \-\-literal\-encoding= encoding
-Select the
-.M dvips 1
-encoding used for the font. No glyph substitutions will be permitted, so
-the output encoding will equal the input encoding (and
-.B otftotfm
-will not generate an output encoding).
-'
-.Sp
-.TP 5
-.BI \-\-ligkern= command
-Execute the specified LIGKERN
-.IR command
-in addition to any in the encoding. For example, "\fB\-\-ligkern\fR 'T {L}
-h'" suppresses any T_h ligature in the font. You can supply multiple
-.B \-\-ligkern
-options. See ENCODINGS, below.
-'
-.Sp
-.TP 5
-.BI \-\-position= command
-Execute the specified POSITION
-.IR command
-in addition to any in the encoding. For example, "\fB\-\-position\fR 'T 10
-0 20'" adds ten units of space to either side of the "T" character. You
-can supply multiple
-.B \-\-position
-options. See ENCODINGS, below.
-'
-.Sp
-.TP 5
-.BI \-\-unicoding= command
-Execute the specified UNICODING
-.IR command
-in addition to any in the encoding. For example, "\fB\-\-unicoding\fR 'pi1
-=: uni03D6'" tells
-.B otftotfm
-to encode "/pi1" as U+03D6 GREEK PI SYMBOL. You can supply multiple
-.B \-\-unicoding
-options. See ENCODINGS, below.
-'
-.Sp
-.TP 5
-.BI \-\-no\-encoding\-commands
-Ignore any LIGKERN and/or UNICODING commands in the encoding file.
-'
-.Sp
-.TP 5
-.BI \-\-no\-default\-ligkern
-Don't include
-.BR otftotfm 's
-default LIGKERN commands.
-'
-.Sp
-.TP 5
-.BI \-\-coding\-scheme= scheme
-Set the font's TFM coding scheme to
-.IR scheme ,
-which must be a string less than 40 characters long containing no
-parentheses. The default is the encoding's PostScript name. Most tools
-ignore the coding scheme, so you probably don't need to worry about this
-command unless you are using fontinst.
-'
-.Sp
-.TP 5
.BI \-\-boundary\-char= char
Set the font's boundary character to
.IR char ,
@@ -546,12 +494,10 @@ versions of a character from within a TeX file. For instance, say that your
font provides three versions of "A". If you want to access them all, pick a
character to be your alternate selector -- say "*". Then give
.B otftotfm
-the
-.BR \-\-altselector\-char= '*'
+the \&'\-\-altselector\-char="*"'
option. In TeX, "A" will produce the normal version, "A*" will produce the
first alternate, and "A**" will produce the second alternate. Furthermore,
-"s*t" will activate any discretionary "s_t" ligature in the font. The
-default alternate-selector character is taken from the encoding.
+"s*t" will activate any discretionary "s_t" ligature in the font.
.Sp
The
.B \-\-altselector\-char
@@ -560,8 +506,9 @@ mechanism uses the features specified by
options. You don't need to turn on those features if you use
.BR \-\-altselector .
.Sp
-See Sivan Toledo's article cited in the SEE ALSO section for more
-information.
+The alternate-selector character may also be specified in the encoding; see
+ENCODINGS, below. See Sivan Toledo's article cited in the SEE ALSO section
+for more information.
'
.Sp
.TP 5
@@ -604,7 +551,7 @@ option acts like
.B \-\-clear\-alternates
followed by
.BI \-\-include\-alternates " pattern\fR. "
-For pattern syntax, see CHARACTER PATTERNS, below.
+For pattern syntax, see GLYPH PATTERNS, below.
.Sp
OpenType fonts can have many alternates per character, most of which aren't
interesting. For example, the character "a" in WarnockPro-Regular has five
@@ -614,15 +561,80 @@ alternates, "ordfeminine", "Asmall", "asuperior", "a.end", and
option lets you cycle through these alternates, but it's better to leave
out the ones you don't want, to avoid overfull encodings. Thus, if you were
only interested in ".end" variants, you might supply an
-.BR \-\-include\-alternates= "'*.end'"
+\&'\-\-include\-alternates="*.end"'
option.
.Sp
-In the command line below, the '*.end' pattern will apply to "aalt"
+In the command line below, the \&'*.end' pattern will apply to "aalt"
alternates, but not to "salt" alternates.
.nf
- \fBotftotfm\fR \fB\-f\fRsalt \fB\-\-include\-alternates\fR='*.end' \fB\-f\fRaalt \.\.\.
+ \fBotftotfm\fR \fB\-f\fRsalt \fB\-\-include\-alternates\fR="*.end" \fB\-f\fRaalt \.\.\.
.fi
'
+.Sp
+.TP 5
+.BI \-\-ligkern= command
+Add a LIGKERN
+.IR command
+to the encoding. For example, \&'\fB\-\-ligkern\fR "T {L} h"' suppresses any
+T_h ligature in the font. You can supply multiple
+.B \-\-ligkern
+options. See ENCODINGS, below.
+'
+.Sp
+.TP 5
+.BI \-\-position= command
+Add a POSITION
+.IR command
+to the encoding. For example, \&'\fB\-\-position\fR "T 10 0 20"' adds ten
+units of space to either side of the "T" character. You can supply
+multiple
+.B \-\-position
+options. See ENCODINGS, below.
+'
+.Sp
+.TP 5
+.BI \-\-unicoding= command
+Add a UNICODING
+.IR command
+to the encoding. For example, \&'\fB\-\-unicoding\fR "pi1 =: uni03D6"' tells
+.B otftotfm
+to encode "/pi1" as U+03D6 GREEK PI SYMBOL. You can supply multiple
+.B \-\-unicoding
+options. See ENCODINGS, below.
+'
+.Sp
+.TP 5
+.BI \-\-no\-encoding\-commands
+Ignore any LIGKERN and/or UNICODING commands in the encoding file.
+'
+.Sp
+.TP 5
+.BI \-\-no\-default\-ligkern
+Don't include
+.BR otftotfm 's
+default LIGKERN commands.
+'
+.Sp
+.TP 5
+.BI \-\-coding\-scheme= scheme
+Add a CODINGSCHEME to the encoding. See ENCODINGS, below.
+'
+.Sp
+.TP 5
+.BI \-\-warn\-missing
+Warn about encoded characters not supported by the font. See the
+WARNMISSING command in ENCODINGS, below.
+'
+.Sp
+.TP 5
+.BI \-\-literal\-encoding= encoding
+Select the
+.M dvips 1
+encoding used for the font. No glyph substitutions will be permitted, so
+the output encoding will equal the input encoding (and
+.B otftotfm
+will not generate an output encoding).
+'
.PD
'
'
@@ -673,6 +685,11 @@ program. This can be useful if you're installing a bunch of fonts; it is
much faster to run
.B updmap
once, at the end, than to run it once per font.
+'
+.Sp
+.TP 5
+.BI \-\-no\-truetype
+Do not install TrueType-flavored OpenType fonts.
.PD
'
'
@@ -724,6 +741,20 @@ argument is supplied.
.TP 5
.BI \-\-no\-map
Do not generate a font map line for the font.
+'
+.\" .Sp
+.\" .TP 5
+.\" .BI \-\-base\-name name
+.\" Experts only: Set the TeX name of the "base" output font. When
+.\" .B otftotfm
+.\" needs to make a virtual font (because of font features and/or
+.\" letterspacing), it must generate at least two TFM metrics files, one for
+.\" the base font and one for the virtual font. In some cases, multiple
+.\" virtual fonts can share the same base metrics, reducing the number of
+.\" installed metrics files. This option lets you explicitly set the name of
+.\" the base output font independently from the main output font, and thus
+.\" force fonts to share base metrics. The default base name is derived from
+.\" the TeX name, with "\f(CW\-\-base\fR" appended.
.PD
'
'
@@ -809,28 +840,33 @@ Print the version number and some short non-warranty information and exit.
'
.SH ENCODINGS
.B Otftotfm
-interprets encoding files as Unicode. For example, if an input encoding
-has "/dotlessi" at position 10, then
-.B otftotfm
-detects that the user wants to encode Unicode character U+0131 LATIN SMALL
-LETTER DOTLESS I at position 10. The output encoding will use whatever
-glyph the font suggests for that Unicode character, given the collection of
-features you chose.
+interprets encoding files as Unicode. For example, say an input encoding
+has "/dotlessi" at position 10.
+.B Otftotfm
+detects that position 10 should contain Unicode character U+0131 LATIN
+SMALL LETTER DOTLESS I, and uses the font's glyph for that character
+(possibly modified by any active features). The selected glyph might not
+be named "dotlessi"; only the Unicode value matters.
.PP
-You can control this process with "UNICODING" comments in the input
-encoding file. UNICODING comments have the following format:
+.B Otftotfm
+assigns Unicode values to glyph names using a table published by Adobe (SEE
+ALSO has a reference), with extensions for TeX. For more fine-grained
+control, add UNICODING commands to the input encoding file. These commands
+have the following format:
.nf
% UNICODING \fIglyph\fR =: \fIchoice1\fR [\fIchoice2\fR ...] ;
.fi
-\fIGlyph\fR and the
-.IR choice s
-are PostScript glyph names. This comment tells
+This tells
.B otftotfm
that the glyph named
.I glyph
translates into the first Unicode value in the
.I choice
-list that has a character in the font. For example,
+list that has a character in the font. \fIGlyph\fR and the
+.IR choice s
+are PostScript glyph names; the initial "%" sign is required; and each
+UNICODING line can contain multiple commands, separated by spaced
+semicolons. For example,
.nf
% UNICODING pi1 =: uni03D6 ;
.fi
@@ -845,34 +881,22 @@ glyph names:
.nf
% UNICODING Delta =: Deltagreek Delta ;
.fi
-.B Otftotfm
-uses Adobe's
-.I glyphlist.txt
-file to translate glyph names to Unicode; see
-.IR http://partners.adobe.com/asn/developer/type/unicodegn.html .
-.LP
-You can map a glyph to nothing to remove that glyph from the input
-encoding. This is useful to remove optional characters; for instance:
+Supply zero choices to remove a glyph from the input encoding. For
+instance:
.nf
% UNICODING ff =: ; fi =: ; fl =: ; ffi =: ; ffl =: ;
.fi
The f-ligatures will be added back to the encoding, preferably at their
-original locations, if some font feature requires them.
-.LP
-Map a glyph to 'emptyslot' if you don't want
+original locations, if some font feature requires them. Finally, map a
+glyph to \&'emptyslot' if you don't want
.B otftotfm
-to use the slot for a ligature character. For example, given this
-UNICODING,
+to use the slot for a ligature character. For example, this will leave the
+\&'ff' slot unused if the font has no \&'ff' glyph:
.nf
- % UNICODING ff =: ff emptyslot ;
+ % UNICODING ff =: ff emptyslot ;
.fi
-.B otftotfm
-will leave the 'ff' encoding slot unused if the font has no 'ff' glyph.
(Note that most OpenType fonts provide a visible representation for unused
encoding slots, namely a box with an X inside.)
-.LP
-Each UNICODING line can contain multiple commands, separated by spaced
-semicolons.
.PP
LIGKERN comments in the encoding can add ligatures and inhibit kerns, as in
.M afm2tfm 1 .
@@ -885,8 +909,8 @@ are removed and replaced by
.IR result .
To preserve the left-hand glyph, for an effect like "\fIglyph1\fR
\fIglyph2\fR =: \fIglyph1\fR \fIresult\fR", use "|=:" instead; to preserve
-the right-hand glyph, use "=:|". The other five ligature operators are not
-yet supported.
+the right-hand glyph, use "=:|".
+.\" The other five ligature operators are not yet supported.
To remove all kerns between two characters, say:
.nf
% LIGKERN \fIglyph1\fR {} \fIglyph2\fR ;
@@ -929,6 +953,21 @@ from an encoding file with commands like this:
As with UNICODING, each LIGKERN or LIGKERNX line can contain multiple
commands, separated by spaced semicolons.
.PP
+.B Otftotfm
+has a default set of eight ligatures, namely:
+.nf
+ space l =: lslash ; space L =: Lslash ;
+ question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
+ hyphen hyphen =: endash ; endash hyphen =: emdash ;
+ quoteleft quoteleft =: quotedblleft ;
+ quoteright quoteright =: quotedblright
+.fi
+LIGKERN commands in the encoding file and
+.B \-\-ligkern
+options can override these defaults, or supply the
+.B \-\-no\-default\-ligkern
+option to turn them off.
+.PP
The POSITION command shifts a glyph within its bounding box. The syntax is
.nf
% POSITION \fIglyph\fR \fIpdx\fR \fIpdy\fR \fIadx\fR ;
@@ -951,45 +990,44 @@ To move the "degree" symbol up by 20 units, supply
% POSITION degree 0 20 0
.fi
.PP
-Finally, the CODINGSCHEME command specifies a default
-.B \-\-coding\-scheme
-for the encoding; for example:
+The CODINGSCHEME command specifies the coding scheme for fonts using this
+encoding. This is a string, less than 40 characters long and containing no
+parentheses, that classifies the encoding for TeX's purposes. Sample
+coding schemes include "TEX TEXT", "TEX MATH ITALIC", and "EXTENDED TEX
+FONT ENCODING - LATIN". For example:
.nf
- % CODINGSCHEME EXTENDED TEX FONT ENCODING
+ % CODINGSCHEME EXTENDED TEX FONT ENCODING - LATIN
+.fi
+Most tools ignore the coding scheme; fontinst is an exception.
+.B Otftotfm
+uses the encoding's PostScript name for the default coding scheme.
+.PP
+Finally, the WARNMISSING command makes any glyphs not supported by the
+input font appear as black boxes. The
+.M dvips 1
+processor will also print a warning when encountering these glyphs. For
+example:
+.nf
+ % WARNMISSING yes
.fi
.PP
The
.BR \-\-unicoding ,
.BR \-\-ligkern ,
+.BR \-\-position ,
+.BR \-\-coding\-scheme ,
and
-.B \-\-position
-options let you add virtual UNICODING, LIGKERN/LIGKERNX, and POSITION
-comments to an encoding.
-.PP
-.B Otftotfm
-has a default set of eight ligatures, namely:
-.nf
- space l =: lslash ; space L =: Lslash ;
- question quoteleft =: questiondown ; exclam quoteleft =: exclamdown ;
- hyphen hyphen =: endash ; endash hyphen =: emdash ;
- quoteleft quoteleft =: quotedblleft ;
- quoteright quoteright =: quotedblright
-.fi
-LIGKERN commands in the encoding file and
-.B \-\-ligkern
-options can override these defaults, or supply the
-.B \-\-no\-default\-ligkern
-option to turn them off.
-.PP
-Some common encoding files have commands that are inappropriate for
-OpenType fonts. For example, "t1.enc" hard-codes f-ligatures, which can
-cause problems with small-cap fonts. Supply the
+.B \-\-warn\-missing
+options add UNICODING, LIGKERN/LIGKERNX, POSITION, CODINGSCHEME, and
+WARNMISSING commands to an encoding, and can override commands in the
+encoding itself. Some common encoding files have commands that are
+inappropriate for OpenType fonts; for example, "t1.enc" hard-codes
+f-ligatures, which can cause problems with small-cap fonts. Supply the
.B \-\-no\-encoding\-commands
-option to ignore all commands from the encoding file. Explicit
+option to ignore all commands from the encoding file. Commands from
+options like
.B \-\-ligkern
-and
-.B \-\-unicoding
-options are processed in any case.
+are processed in any case.
'
.SS New Glyphs
.PP
@@ -1034,6 +1072,9 @@ The parallel symbol "||"
asteriskmath
Vertically-centered "*"
.TP
+ringfitted
+Ring accent centered on the width of "A"
+.TP
twelveudash
2/3-em-wide dash
.TP
@@ -1089,9 +1130,11 @@ and
.BR \-\-include\-alternates
options, and their
.B \-\-exclude
+and
+.B \-\-*\-filter
variants, accept the following types of pattern.
.BUP
-Glyph names. Example: "Aacute". Use
+Glyph names. Example: "Aacute". For PostScript-flavored fonts, use
.M otfinfo 1 's
.B \-g
option to see a font's glyph names, and "\fBcfftot1\fR \fIfont\fR.otf |
@@ -1184,13 +1227,12 @@ Lets the user choose between context-appropriate swash forms for each
character. For example, in the words "Ab AC", the first "A" might be
translated to a swash form, while the second might not. There may be more
than one choice for a given letter, in which case the user should be able
-to select among them. TeX can't support complex contextual swashes, or
-alternate selection, but
-.B otftotfm
+to select among them.
+.B Otftotfm
supports some fonts quite well. The input encoding should have lots of
empty space for swash variants, and it should specify a boundary
character. See also
-.IR calt .
+.IR calt " and " swsh .
.TP 5
.IR dlig ", Discretionary Ligatures"
Activates uncommon ligatures, such as "c_t", "s_p", and "s_t". Supported.
@@ -1289,7 +1331,8 @@ for TeX, since it refers exclusively to stylistic alternates.
.TP 5
.IR sinf ", Scientific Inferiors"
Replaces digits and some punctuation marks with smaller, lowered forms
-intended for subscripts. Supported.
+intended for subscripts. Supported. Compare
+.IR subs .
.TP 5
.IR size ", Optical Size"
This feature stores information about the range of optical sizes for which
@@ -1310,6 +1353,15 @@ in that a Stylistic Set is uniform: an
feature should never involve selection from a set of possible alternate
characters. Supported.
.TP 5
+.IR subs ", Subscript"
+Replaces characters with smaller, lowered forms intended for subscripts.
+Supported. Compare
+.IR sinf ;
+some fonts support
+.I sinf
+but not
+.IR subs .
+.TP 5
.IR sups ", Superscript"
Replaces digits, some punctuation marks, and some lower-case letters with
smaller, raised forms intended for superscripts. Supported.
@@ -1319,7 +1371,10 @@ Activates all swash forms for each character. There may be more than one
swash form, in which case
.B otftotfm
will pick the first one listed. Supported, except that swash variants
-other than the first are inaccessible.
+other than the first are inaccessible. Note that some fonts with swash
+variants support the
+.I cswh
+feature exclusively.
.TP 5
.IR tnum ", Tabular Figures"
All digits will have the same width, so that tables and the like will align
@@ -1347,7 +1402,7 @@ or
.I $HOME/texmf
directory? If so, run the command "kpsewhich \-\-expand\-path='$TEXMF'" to
verify that directory is not being found. You may need to set your TEXMF
-environment variable, to '{!!'"$HOME"'/texmf,!!$TEXMFMAIN}', for instance
+environment variable, to \&'{!!'"$HOME"'/texmf,!!$TEXMFMAIN}', for instance
(note the different kinds of quotes; on my machine, this expands to
\&'{!!/home/kohler/texmf,!!$TEXMFMAIN}').
'
@@ -1365,7 +1420,7 @@ file, or it might be an oversight. Either fix the encoding file or ignore
the warning.
'
.TP 5
-can't map '\fIchar\fR' to Unicode
+can't map \&'\fIchar\fR' to Unicode
'
Another encoding file problem: One of the glyph names in an UNICODING block
could not be converted to Unicode. This is problematic since UNICODING
@@ -1386,7 +1441,7 @@ encoding distributed with
.TP 5
How can I get a small-caps "SS" in place of the German sharp-S?
'
-Supply the option "\fB\-\-unicoding\fR 'germandbls =: SSsmall'".
+Supply the option \&'\fB\-\-unicoding\fR "germandbls =: SSsmall"'.
'
.TP 5
How can I prevent f-ligatures from forming in a small-caps font?
@@ -1410,6 +1465,26 @@ option and run
.B updmap
manually when you're done.
'
+.TP 5
+How can I refer to the different forms of phi?
+'
+\fBOtftotfm\fR follows TeX practice and widely-distributed TeX encoding
+vectors, so "/phi" in an input encoding vector should map to a "straight"
+phi and "/phi1" should map to a "loopy" phi. Note that TeX practice
+differs from the PostScript standard naming conventions, in which "/phi" is
+"loopy" and "/phi1" is "straight"; this means that \fBotftotfm\fR may map
+"/phi" in an input encoding vector to a font's "/phi1" glyph, and vice
+versa. Perhaps most unambiguously, you can use "/uni03D5" for the
+"straight" form and "/uni03C6" for the "loopy" form.
+'
+.TP 5
+How can I get lining figures (that is, normal line-height digits) with small caps ('\fB\-f\fRsmcp')?
+'
+Many fonts use old-style figures by default with small caps. Since the
+default is not specified, it's wise to explicitly supply \&'\fB\-f\fRlnum' or
+\&'\fB-f\fRonum'.
+
+'
.SH "BUGS"
.\" .LP
.\" Presumably some context-sensitive positionings and ligatures could be
@@ -1461,7 +1536,11 @@ http://www.tug.org/TUGboat/Articles/tb21-2/tb67tole.pdf
.LP
Michel Goossens, Frank Mittelbach, and Alexander Samarin,
.IR "The LaTeX Companion"
-(for information on the .fd file format).
+(for information on the .fd file format)
+.LP
+Adobe Systems, "Unicode and Glyph Names". Refers to the glyphlist.txt file
+used to translate glyph names to Unicode code points.
+http://partners.adobe.com/public/developer/opentype/index_glyph.html
'
.SH AUTHOR
Eddie Kohler (kohler@cs.ucla.edu)
@@ -1470,4 +1549,3 @@ Thanks to Karl Berry, Marco Kuhlmann, Adam Lindsay, Bruce D'Arcus, Thomas
Esser, Claire Connelly, Nelson H.F. Beebe, and Ryuji Suzuki for
suggestions, bug reports, and help. Particular thanks to Achim Blumensath
and Michael Zedler for suggestions and patches, some of them extensive.
-
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.cc b/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.cc
index d5794c5886d..81218005ed6 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.cc
@@ -1,6 +1,6 @@
/* otftotfm.cc -- driver for translating OpenType fonts to TeX metrics
*
- * Copyright (c) 2003-2005 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -23,6 +23,7 @@
#include <efont/t1item.hh>
#include <efont/t1bounds.hh>
#include <efont/otfcmap.hh>
+#include <efont/otfname.hh>
#include <efont/otfgsub.hh>
#include "glyphfilter.hh"
#include "metrics.hh"
@@ -32,7 +33,7 @@
#include "kpseinterface.h"
#include "util.hh"
#include "otftotfm.hh"
-#include "md5.h"
+#include <lcdf/md5.h>
#include <lcdf/clp.h>
#include <lcdf/error.hh>
#include <lcdf/hashmap.hh>
@@ -95,6 +96,7 @@ using namespace Efont;
#define SPACE_FACTOR_OPT 337
#define MATH_SPACING_OPT 338
#define POSITION_OPT 339
+#define WARN_MISSING_OPT 340
#define AUTOMATIC_OPT 341
#define FONT_NAME_OPT 342
@@ -119,12 +121,14 @@ using namespace Efont;
#define VF_DIR_OPT (DIR_OPTS + O_VF)
#define VPL_DIR_OPT (DIR_OPTS + O_VPL)
#define TYPE1_DIR_OPT (DIR_OPTS + O_TYPE1)
+#define TRUETYPE_DIR_OPT (DIR_OPTS + O_TRUETYPE)
#define NO_OUTPUT_OPTS 380
#define NO_ENCODING_OPT (NO_OUTPUT_OPTS + G_ENCODING)
#define NO_TYPE1_OPT (NO_OUTPUT_OPTS + G_TYPE1)
#define NO_DOTLESSJ_OPT (NO_OUTPUT_OPTS + G_DOTLESSJ)
#define NO_UPDMAP_OPT (NO_OUTPUT_OPTS + G_UPDMAP)
+#define NO_TRUETYPE_OPT (NO_OUTPUT_OPTS + G_TRUETYPE)
#define CHAR_OPTTYPE (Clp_FirstUserType)
@@ -150,6 +154,7 @@ static Clp_Option options[] = {
{ "kern-precision", 'k', MINIMUM_KERN_OPT, Clp_ArgDouble, 0 },
{ "ligkern", 0, LIGKERN_OPT, Clp_ArgString, 0 },
{ "position", 0, POSITION_OPT, Clp_ArgString, 0 },
+ { "warn-missing", 0, WARN_MISSING_OPT, 0, Clp_Negate },
{ "no-encoding-commands", 0, NO_ECOMMAND_OPT, 0, Clp_OnlyNegated },
{ "default-ligkern", 0, DEFAULT_LIGKERN_OPT, 0, Clp_Negate },
{ "unicoding", 0, UNICODING_OPT, Clp_ArgString, 0 },
@@ -170,6 +175,7 @@ static Clp_Option options[] = {
{ "virtual", 0, VIRTUAL_OPT, 0, Clp_Negate },
{ "no-encoding", 0, NO_ENCODING_OPT, 0, Clp_OnlyNegated },
{ "no-type1", 0, NO_TYPE1_OPT, 0, Clp_OnlyNegated },
+ { "no-truetype", 0, NO_TRUETYPE_OPT, 0, Clp_OnlyNegated },
{ "no-dotlessj", 0, NO_DOTLESSJ_OPT, 0, Clp_OnlyNegated },
{ "no-updmap", 0, NO_UPDMAP_OPT, 0, Clp_OnlyNegated },
{ "map-file", 0, MAP_FILE_OPT, Clp_ArgString, Clp_Negate },
@@ -186,6 +192,7 @@ static Clp_Option options[] = {
{ "vpl-directory", 0, VPL_DIR_OPT, Clp_ArgString, 0 },
{ "vf-directory", 0, VF_DIR_OPT, Clp_ArgString, 0 },
{ "type1-directory", 0, TYPE1_DIR_OPT, Clp_ArgString, 0 },
+ { "truetype-directory", 0, TRUETYPE_DIR_OPT, Clp_ArgString, 0 },
{ "quiet", 'q', QUIET_OPT, 0, Clp_Negate },
{ "glyphlist", 0, GLYPHLIST_OPT, Clp_ArgString, 0 },
@@ -242,7 +249,7 @@ static int skew_char = -1;
static String out_encoding_file;
static String out_encoding_name;
-int output_flags = G_ENCODING | G_METRICS | G_VMETRICS | G_PSFONTSMAP | G_TYPE1 | G_DOTLESSJ | G_UPDMAP | G_BINARY;
+int output_flags = G_ENCODING | G_METRICS | G_VMETRICS | G_PSFONTSMAP | G_TYPE1 | G_DOTLESSJ | G_UPDMAP | G_BINARY | G_TRUETYPE;
bool automatic = false;
bool verbose = false;
@@ -299,20 +306,21 @@ Font feature and transformation options:\n\
printf("\
Encoding options:\n\
-e, --encoding=FILE Use DVIPS encoding FILE as a base encoding.\n\
- --literal-encoding=FILE Use DVIPS encoding FILE verbatim.\n\
- --ligkern=COMMAND Add a LIGKERN command.\n\
- --position=COMMAND Add a POSITION command.\n\
- --unicoding=COMMAND Add a UNICODING command.\n\
- --no-encoding-commands Ignore encoding file's LIGKERN/UNICODINGs.\n\
- --default-ligkern Ignore encoding file's LIGKERNs, use defaults.\n\
- --coding-scheme=SCHEME Set the output coding scheme to SCHEME.\n\
--boundary-char=CHAR Set the boundary character to CHAR.\n\
--altselector-char=CHAR Set the alternate selector character to CHAR.\n\
--altselector-feature=F Activate feature F for --altselector-char.\n\
--alternates-filter=PAT Include only alternate characters matching PAT.\n\
- --include-alternates=PAT Same, but cumulative.\n\
+ --include-alternates=PAT Same as --alternates-filter, but cumulative.\n\
--exclude-alternates=PAT Ignore alternate characters matching PAT.\n\
--clear-alternates Clear included/excluded alternates.\n\
+ --ligkern=COMMAND Add a ligature or kern.\n\
+ --position=COMMAND Add a POSITION command.\n\
+ --unicoding=COMMAND Add a UNICODING command.\n\
+ --no-encoding-commands Ignore encoding file's LIGKERN/UNICODINGs.\n\
+ --no-default-ligkern Don't include default LIGKERNs.\n\
+ --coding-scheme=SCHEME Set the output coding scheme to SCHEME.\n\
+ --warn-missing Warn about characters not supported by font.\n\
+ --literal-encoding=FILE Use DVIPS encoding FILE verbatim.\n\
\n");
printf("\
Automatic mode options:\n\
@@ -322,6 +330,7 @@ Automatic mode options:\n\
--no-type1 Do not generate Type 1 fonts.\n\
--no-dotlessj Do not generate dotless-j fonts.\n\
--no-updmap Do not run updmap.\n\
+ --no-truetype Do not install TrueType-flavored input fonts.\n\
\n\
Output options:\n\
-n, --name=NAME Generated font name is NAME.\n\
@@ -339,6 +348,7 @@ File location options:\n\
--vpl-directory=DIR Put VPL files in DIR [.|automatic].\n\
--encoding-directory=DIR Put encoding files in DIR [.|automatic].\n\
--type1-directory=DIR Put Type 1 fonts in DIR [automatic].\n\
+ --truetype-directory=DIR Put TrueType fonts in DIR [automatic].\n\
--map-file=FILE Update FILE with psfonts.map information [-].\n\
\n\
Other options:\n\
@@ -417,7 +427,7 @@ get_design_size(const FontInfo &finfo)
if (!gpos_table)
throw OpenType::Error();
- ErrorHandler *errh = ErrorHandler::silent_handler();
+ ErrorHandler *errh = ErrorHandler::ignore_handler();
OpenType::Gpos gpos(gpos_table, errh);
// extract 'size' feature(s)
@@ -430,9 +440,10 @@ get_design_size(const FontInfo &finfo)
if (size_fid < 0)
throw OpenType::Error();
- // it looks like Adobe fonts implement an old, incorrect idea
+ // old Adobe fonts implement an old, incorrect idea
// of what the FeatureParams offset means.
- OpenType::Data size_data = gpos.feature_list().params(size_fid, 10, errh, true);
+ OpenType::Name name(finfo.otf->table("name"), errh);
+ OpenType::Data size_data = gpos.feature_list().size_params(size_fid, name, errh);
if (!size_data.length())
throw OpenType::Error();
@@ -483,8 +494,7 @@ real_string(double value, double du)
double
font_slant(const FontInfo &finfo)
{
- double val;
- (void) finfo.cff->dict_value(Efont::Cff::oItalicAngle, &val);
+ double val = finfo.italic_angle();
return -tan(val * M_PI / 180.0) + slant;
}
@@ -527,12 +537,11 @@ output_pl(const Metrics &metrics, const String &ps_name, int boundary_char,
if (actual_slant)
fprintf(f, " (SLANT R %g)\n", actual_slant);
- double val;
if (char_bounds(bounds, width, finfo, font_xform, ' ')) {
// advance space width by letterspacing, scale by space_factor
- double space_width = (width + letterspace) * space_factor;
+ double space_width = (width + (vpl ? letterspace : 0)) * space_factor;
fprint_real(f, " (SPACE", space_width, du);
- if (finfo.cff->dict_value(Efont::Cff::oIsFixedPitch, &val) && val) {
+ if (finfo.is_fixed_pitch()) {
// fixed-pitch: no space stretch or shrink
fprint_real(f, " (STRETCH", 0, du);
fprint_real(f, " (SHRINK", 0, du);
@@ -605,6 +614,7 @@ output_pl(const Metrics &metrics, const String &ps_name, int boundary_char,
Vector<int> lig_code2, lig_outcode, lig_context, kern_code2, kern_amt;
// don't print KRN x after printing LIG x
uint32_t used[8];
+ bool any_ligs = false;
for (int i = 0; i <= 256; i++)
if (metrics.glyph(i) && minimum_kern < 10000) {
int any_lig = metrics.ligatures(i, lig_code2, lig_outcode, lig_context);
@@ -628,8 +638,12 @@ output_pl(const Metrics &metrics, const String &ps_name, int boundary_char,
<< " R " << real_string(this_kern, du)
<< ')' << glyph_comments[*k2] << '\n';
}
- if (kern_sa)
+ if (kern_sa) {
+ if (any_ligs)
+ fprintf(f, "\n");
fprintf(f, " (LABEL %s)%s\n%s (STOP)\n", glyph_ids[i].c_str(), glyph_comments[i].c_str(), kern_sa.c_str());
+ any_ligs = true;
+ }
}
}
fprintf(f, " )\n");
@@ -647,22 +661,24 @@ output_pl(const Metrics &metrics, const String &ps_name, int boundary_char,
sa.clear();
push_stack.clear();
CharstringBounds boundser(font_xform);
- const CharstringProgram *program = finfo.cff;
+ const CharstringProgram *program = finfo.program();
for (const Setting *s = settings.begin(); s < settings.end(); s++)
switch (s->op) {
case Setting::SHOW:
- boundser.char_bounds(program->glyph_context(s->y));
+ if (vpl || program == finfo.program())
+ boundser.char_bounds(program->glyph_context(s->y));
// 3.Aug.2004 -- reported by Marco Kuhlmann: Don't use
// glyph_ids[] array when looking at a different font.
- if (program == finfo.cff)
+ if (program == finfo.program())
sa << " (SETCHAR " << glyph_ids[s->x] << ')' << glyph_base_comments[s->x] << "\n";
else
sa << " (SETCHAR D " << s->x << ")\n";
break;
case Setting::MOVE:
- boundser.translate(s->x, s->y);
+ if (vpl)
+ boundser.translate(s->x, s->y);
if (s->x)
sa << " (MOVERIGHT R " << real_string(s->x, du) << ")\n";
if (s->y)
@@ -670,9 +686,11 @@ output_pl(const Metrics &metrics, const String &ps_name, int boundary_char,
break;
case Setting::RULE:
- boundser.mark(Point(0, 0));
- boundser.mark(Point(s->x, s->y));
- boundser.translate(s->x, 0);
+ if (vpl) {
+ boundser.mark(Point(0, 0));
+ boundser.mark(Point(s->x, s->y));
+ boundser.translate(s->x, 0);
+ }
sa << " (SETRULE R " << real_string(s->y, du) << " R " << real_string(s->x, du) << ")\n";
break;
@@ -689,11 +707,30 @@ output_pl(const Metrics &metrics, const String &ps_name, int boundary_char,
case Setting::POP: {
assert(push_stack.size());
Point p = push_stack.back() - boundser.transform(Point(0, 0));
- boundser.translate(p.x, p.y);
+ if (vpl)
+ boundser.translate(p.x, p.y);
push_stack.pop_back();
sa << " (POP)\n";
break;
}
+
+ case Setting::SPECIAL: {
+ bool needhex = false;
+ for (const char *str = s->s.begin(); str < s->s.end() && !needhex; str++)
+ if (*str < ' ' || *str > '~' || *str == '(' || *str == ')')
+ needhex = true;
+ if (needhex) {
+ sa << " (SPECIALHEX ";
+ for (const char *str = s->s.begin(); str < s->s.end(); str++) {
+ static const char hexdig[] = "0123456789ABCDEF";
+ int val = (unsigned char) *str;
+ sa << hexdig[val >> 4] << hexdig[val & 0xF];
+ }
+ sa << ")\n";
+ } else
+ sa << " (SPECIAL " << s->s << ")\n";
+ break;
+ }
}
@@ -1010,7 +1047,7 @@ output_metrics(Metrics &metrics, const String &ps_name, int boundary_char,
const FontInfo &finfo,
const String &encoding_name, const String &encoding_file,
const String &font_name,
- void (*dvips_include)(const String &ps_name, StringAccum &, ErrorHandler *),
+ String (*dvips_include)(const String &ps_name, const FontInfo &, ErrorHandler *),
ErrorHandler *errh)
{
String base_font_name = font_name;
@@ -1079,9 +1116,7 @@ output_metrics(Metrics &metrics, const String &ps_name, int boundary_char,
sa << encoding_name << " ReEncodeFont\" <[" << pathname_filename(encoding_file);
else
sa << "\"";
- sa << ' ';
- dvips_include(ps_name, sa, errh);
- sa << '\n';
+ sa << ' ' << dvips_include(ps_name, finfo, errh) << '\n';
update_autofont_map(base_font_name, sa.take_string(), errh);
// if virtual font, remove any map line for base font name
if (base_font_name != font_name)
@@ -1155,13 +1190,15 @@ report_underused_features(const HashMap<uint32_t, int> &feature_usage, ErrorHand
static String otf_filename;
-static void
-main_dvips_map(const String &ps_name, StringAccum &sa, ErrorHandler *errh)
+static String
+main_dvips_map(const String &ps_name, const FontInfo &finfo, ErrorHandler *errh)
{
if (String fn = installed_type1(otf_filename, ps_name, (output_flags & G_TYPE1) != 0, errh))
- sa << "<" << pathname_filename(fn);
- else
- sa << "<<" << pathname_filename(otf_filename);
+ return "<" + pathname_filename(fn);
+ if (!finfo.cff)
+ if (String fn = installed_truetype(otf_filename, (output_flags & G_TRUETYPE) != 0, errh))
+ return "<" + pathname_filename(fn);
+ return "<" + pathname_filename(otf_filename);
}
static void
@@ -1208,18 +1245,11 @@ do_gsub(Metrics& metrics, const OpenType::Font& otf, DvipsEncoding& dvipsenc, bo
// apply alternate selectors
if (metrics.altselectors() && !dvipsenc_literal) {
- // apply default features
- if (!altselector_features.size()) {
- altselector_features.push_back(OpenType::Tag("dlig"));
- altselector_feature_filters.insert(OpenType::Tag("dlig"), &null_filter);
- altselector_features.push_back(OpenType::Tag("salt"));
- altselector_feature_filters.insert(OpenType::Tag("salt"), &null_filter);
- }
// do lookups
altselector_features.swap(interesting_features);
altselector_feature_filters.swap(feature_filters);
Vector<Lookup> alt_lookups(gsub.nlookups(), Lookup());
- find_lookups(gsub.script_list(), gsub.feature_list(), alt_lookups, ErrorHandler::silent_handler());
+ find_lookups(gsub.script_list(), gsub.feature_list(), alt_lookups, ErrorHandler::ignore_handler());
Vector<OpenType::Substitution> alt_subs;
for (int i = 0; i < alt_lookups.size(); i++)
if (alt_lookups[i].used) {
@@ -1244,7 +1274,7 @@ do_gpos(Metrics& metrics, const OpenType::Font& otf, HashMap<uint32_t, int>& fea
if (lookups[i].used) {
OpenType::GposLookup l = gpos.lookup(i);
poss.clear();
- bool understood = l.unparse_automatics(poss);
+ bool understood = l.unparse_automatics(poss, errh);
int nunderstood = metrics.apply(poss);
// mark as used
@@ -1294,36 +1324,20 @@ do_file(const String &otf_filename, const OpenType::Font &otf,
const DvipsEncoding &dvipsenc_in, bool dvipsenc_literal,
ErrorHandler *errh)
{
- // get font
- Cff cff(otf.table("CFF"), errh);
- if (!cff.ok())
- return;
-
- Cff::FontParent *fp = cff.font(PermString(), errh);
- if (!fp || !fp->ok())
+ FontInfo finfo(&otf, errh);
+ if (!finfo.ok())
return;
- Cff::Font *font = dynamic_cast<Cff::Font *>(fp);
- if (!font) {
- errh->error("CID-keyed fonts not supported");
- return;
- }
-
- OpenType::Cmap cmap(otf.table("cmap"), errh);
- assert(cmap.ok());
-
- FontInfo finfo;
- finfo.otf = &otf;
- finfo.cff = font;
- finfo.cmap = &cmap;
+ if (!finfo.cff)
+ errh->warning("TrueType-flavored font support is experimental");
// save glyph names
Vector<PermString> glyph_names;
- font->glyph_names(glyph_names);
+ finfo.glyph_names(glyph_names);
OpenType::debug_glyph_names = glyph_names;
// set typeface name from font family name
{
- String typeface = font->dict_string(Cff::oFamilyName);
+ String typeface = finfo.family_name();
// make it reasonable for the shell
StringAccum sa;
@@ -1336,14 +1350,14 @@ do_file(const String &otf_filename, const OpenType::Font &otf,
// initialize encoding
DvipsEncoding dvipsenc(dvipsenc_in); // make copy
- Metrics metrics(font, font->nglyphs());
+ Metrics metrics(finfo.program(), finfo.nglyphs());
// encode boundary glyph at 256; pretend its Unicode value is '\n'
metrics.encode(256, '\n', metrics.boundary_glyph());
if (dvipsenc_literal)
- dvipsenc.make_metrics(metrics, cmap, font, 0, true, errh);
+ dvipsenc.make_metrics(metrics, finfo, 0, true, errh);
else {
T1Secondary secondary(finfo, font_name, otf_filename);
- dvipsenc.make_metrics(metrics, cmap, font, &secondary, false, errh);
+ dvipsenc.make_metrics(metrics, finfo, &secondary, false, errh);
}
// maintain statistics about features
@@ -1415,7 +1429,7 @@ do_file(const String &otf_filename, const OpenType::Font &otf,
// figure out our FONTNAME
if (!font_name) {
// derive font name from OpenType font name
- font_name = font->font_name();
+ font_name = finfo.postscript_name();
if (encoding_file) {
int slash = encoding_file.find_right('/') + 1;
int dot = encoding_file.find_right('.');
@@ -1447,15 +1461,18 @@ do_file(const String &otf_filename, const OpenType::Font &otf,
else
metrics.set_coding_scheme(out_encoding_name);
+ // force no type 1
+ if (!finfo.cff && (output_flags & G_TYPE1)) {
+ errh->warning("assuming --no-type1 since this font is TrueType-flavored");
+ output_flags &= ~G_TYPE1;
+ }
+
// output
::otf_filename = otf_filename;
- output_metrics(metrics, font->font_name(), dvipsenc.boundary_char(),
+ output_metrics(metrics, finfo.postscript_name(), dvipsenc.boundary_char(),
finfo,
out_encoding_name, out_encoding_file,
font_name, main_dvips_map, errh);
-
- // done
- delete font;
}
@@ -1504,12 +1521,13 @@ main(int argc, char *argv[])
ErrorHandler *errh = ErrorHandler::static_initialize(new FileErrorHandler(stderr, String(program_name) + ": "));
const char *input_file = 0;
- String glyphlist_file;
+ Vector<String> glyphlist_files;
bool literal_encoding = false;
Vector<String> ligkern;
Vector<String> pos;
Vector<String> unicoding;
bool no_ecommand = false, default_ligkern = true;
+ int warn_missing = -1;
String codingscheme;
GlyphFilter current_substitution_filter;
@@ -1646,6 +1664,10 @@ main(int argc, char *argv[])
pos.push_back(clp->arg);
break;
+ case WARN_MISSING_OPT:
+ warn_missing = !clp->negated;
+ break;
+
case NO_ECOMMAND_OPT:
no_ecommand = true;
break;
@@ -1726,10 +1748,11 @@ main(int argc, char *argv[])
output_flags |= G_VMETRICS;
break;
- case NO_ENCODING_OPT:
- case NO_TYPE1_OPT:
- case NO_DOTLESSJ_OPT:
- case NO_UPDMAP_OPT:
+ case NO_ENCODING_OPT:
+ case NO_TYPE1_OPT:
+ case NO_DOTLESSJ_OPT:
+ case NO_UPDMAP_OPT:
+ case NO_TRUETYPE_OPT:
output_flags &= ~(opt - NO_OUTPUT_OPTS);
break;
@@ -1768,6 +1791,7 @@ main(int argc, char *argv[])
case VF_DIR_OPT:
case VPL_DIR_OPT:
case TYPE1_DIR_OPT:
+ case TRUETYPE_DIR_OPT:
if (!setodir(opt - DIR_OPTS, clp->arg))
usage_error(errh, "%s directory specified twice", odirname(opt - DIR_OPTS));
break;
@@ -1780,7 +1804,7 @@ main(int argc, char *argv[])
break;
case GLYPHLIST_OPT:
- glyphlist_file = clp->arg;
+ glyphlist_files.push_back(clp->arg);
break;
case QUERY_FEATURES_OPT:
@@ -1795,7 +1819,9 @@ main(int argc, char *argv[])
if (clp->negated)
errh = ErrorHandler::default_handler();
else
- errh = ErrorHandler::silent_handler();
+ // 9.Nov.05 -- need a new SilentErrorHandler, because we use
+ // the base SilentErrorHandler elsewhere to ignore errors
+ errh = new SilentErrorHandler;
break;
case VERBOSE_OPT:
@@ -1820,7 +1846,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("otftotfm (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 2002-2005 Eddie Kohler\n\
+ printf("Copyright (C) 2002-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
@@ -1855,15 +1881,29 @@ particular purpose.\n");
}
done:
- try {
- if (!input_file)
- usage_error(errh, "no font filename provided");
- if (!encoding_file) {
- errh->warning("no encoding provided");
- errh->message("(Use '-e ENCODING' to choose an encoding. '-e texnansx' often works,\nor say '-e -' to turn off this warning.)");
- } else if (encoding_file == "-")
- encoding_file = "";
+ // set up file names
+ if (!input_file)
+ usage_error(errh, "no font filename provided");
+ if (!encoding_file) {
+ errh->warning("no encoding provided");
+ errh->message("(Use '-e ENCODING' to choose an encoding. '-e texnansx' often works,\nor say '-e -' to turn off this warning.)");
+ } else if (encoding_file == "-")
+ encoding_file = "";
+ // set up feature filters
+ if (!altselector_features.size()) {
+ if (!current_filter_ptr)
+ current_filter_ptr = new GlyphFilter(current_substitution_filter + current_alternate_filter);
+ altselector_features.push_back(OpenType::Tag("dlig"));
+ altselector_feature_filters.insert(OpenType::Tag("dlig"), current_filter_ptr);
+ altselector_features.push_back(OpenType::Tag("salt"));
+ altselector_feature_filters.insert(OpenType::Tag("salt"), current_filter_ptr);
+ } else if (!current_filter_ptr) {
+ errh->warning("some filtering options ignored");
+ errh->message("(--include-*, --exclude-*, and --*-filter options must occur\nbefore the feature options to which they should apply.)");
+ }
+
+ try {
// read font
otf_data = read_file(input_file, errh);
if (errh->nerrors())
@@ -1884,19 +1924,29 @@ particular purpose.\n");
std::sort(altselector_features.begin(), altselector_features.end());
// find glyphlist
+ if (!glyphlist_files.size()) {
#if HAVE_KPATHSEA
- if (!glyphlist_file) {
- glyphlist_file = kpsei_find_file("glyphlist.txt", KPSEI_FMT_OTHER_TEXT);
- if (glyphlist_file && verbose)
- errh->message("glyphlist.txt found with kpathsea at %s", glyphlist_file.c_str());
- }
+ if (String g = kpsei_find_file("glyphlist.txt", KPSEI_FMT_MAP)) {
+ glyphlist_files.push_back(g);
+ if (verbose)
+ errh->message("glyphlist.txt found with kpathsea at %s", g.c_str());
+ } else
#endif
- if (!glyphlist_file)
- glyphlist_file = SHAREDIR "/glyphlist.txt";
+ glyphlist_files.push_back(SHAREDIR "/glyphlist.txt");
+#if HAVE_KPATHSEA
+ if (String g = kpsei_find_file("texglyphlist.txt", KPSEI_FMT_MAP)) {
+ glyphlist_files.push_back(g);
+ if (verbose)
+ errh->message("texglyphlist.txt found with kpathsea at %s", g.c_str());
+ } else
+#endif
+ glyphlist_files.push_back(SHAREDIR "/texglyphlist.txt");
+ }
// read glyphlist
- if (String s = read_file(glyphlist_file, errh, true))
- DvipsEncoding::parse_glyphlist(s);
+ for (String *g = glyphlist_files.begin(); g < glyphlist_files.end(); g++)
+ if (String s = read_file(*g, errh, true))
+ DvipsEncoding::add_glyphlist(s);
// read encoding
DvipsEncoding dvipsenc;
@@ -1920,7 +1970,7 @@ particular purpose.\n");
// apply default ligkern commands
if (default_ligkern)
- dvipsenc.parse_ligkern(default_ligkerns, 0, ErrorHandler::silent_handler());
+ dvipsenc.parse_ligkern(default_ligkerns, 0, ErrorHandler::ignore_handler());
// apply command-line ligkern commands and coding scheme
cerrh.set_landmark("--ligkern command");
@@ -1934,6 +1984,8 @@ particular purpose.\n");
dvipsenc.parse_unicoding(unicoding[i], 1, &cerrh);
if (codingscheme)
dvipsenc.set_coding_scheme(codingscheme);
+ if (warn_missing >= 0)
+ dvipsenc.set_warn_missing(warn_missing);
do_file(input_file, otf, dvipsenc, literal_encoding, errh);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.hh b/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.hh
index f8f0ed1cc9d..48e4fc9b840 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.hh
+++ b/Build/source/utils/lcdf-typetools/otftotfm/otftotfm.hh
@@ -1,5 +1,10 @@
#ifndef OTFTOTFM_OTFTOTFM_HH
#define OTFTOTFM_OTFTOTFM_HH
+#include <lcdf/string.hh>
+class Metrics;
+class FontInfo;
+class StringAccum;
+class ErrorHandler;
String suffix_font_name(const String &font_name, const String &suffix);
@@ -7,7 +12,7 @@ void output_metrics(Metrics &metrics, const String &ps_name, int boundary_char,
const FontInfo &finfo,
const String &encoding_name, const String &encoding_file,
const String &font_name,
- void (*dvips_include)(const String &ps_name, StringAccum &, ErrorHandler *),
+ String (*dvips_include)(const String &ps_name, const FontInfo &, ErrorHandler *),
ErrorHandler *errh);
int font_x_height(const FontInfo &, const Transform &);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/secondary.cc b/Build/source/utils/lcdf-typetools/otftotfm/secondary.cc
index 09120d331a9..fc9befe8981 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/secondary.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/secondary.cc
@@ -1,6 +1,6 @@
/* secondary.{cc,hh} -- code for generating fake glyphs
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -20,7 +20,12 @@
#include <efont/t1bounds.hh>
#include <efont/t1font.hh>
#include <efont/t1rw.hh>
+#include <efont/otfname.hh>
#include <efont/otfos2.hh>
+#include <efont/otfpost.hh>
+#include <efont/t1csgen.hh>
+#include <efont/t1unparser.hh>
+#include <efont/ttfcs.hh>
#include <lcdf/straccum.hh>
#include <stdarg.h>
#include <errno.h>
@@ -33,6 +38,8 @@ enum { U_EXCLAMDOWN = 0x00A1, // U+00A1 INVERTED EXCLAMATION MARK
U_IJ = 0x0132, // U+0132 LATIN CAPITAL LIGATURE IJ
U_ij = 0x0133, // U+0133 LATIN SMALL LIGATURE IJ
U_DOTLESSJ = 0x0237, // U+0237 LATIN SMALL LETTER DOTLESS J
+ U_RINGABOVE = 0x02DA, // U+02DA RING ABOVE
+ U_COMBININGRINGABOVE = 0x030A, // U+030A COMBINING RING ABOVE
U_CWM = 0x200C, // U+200C ZERO WIDTH NON-JOINER
U_ENDASH = 0x2013, // U+2013 EN DASH
U_PERTENTHOUSAND = 0x2031, // U+2031 PER TEN THOUSAND SIGN
@@ -57,6 +64,7 @@ enum { U_EXCLAMDOWN = 0x00A1, // U+00A1 INVERTED EXCLAMATION MARK
U_ASCENDERCWM = 0xD80A, // invalid Unicode
U_INTERROBANGDOWN = 0xD80B, // invalid Unicode
U_TWELVEUDASH = 0xD80C, // invalid Unicode
+ U_RINGFITTED = 0xD80D, // invalid Unicode
U_VS1 = 0xFE00,
U_VS16 = 0xFE0F,
U_VS17 = 0xE0100,
@@ -66,7 +74,141 @@ enum { U_EXCLAMDOWN = 0x00A1, // U+00A1 INVERTED EXCLAMATION MARK
U_FSMALL = 0xF766,
U_ISMALL = 0xF769,
U_LSMALL = 0xF76C,
- U_SSMALL = 0xF773 };
+ U_SSMALL = 0xF773,
+ U_MATHDOTLESSJ = 0x1D6A5
+};
+
+
+FontInfo::FontInfo(const Efont::OpenType::Font *otf_, ErrorHandler *errh)
+ : otf(otf_), cmap(0), cff_file(0), cff(0), post(0), name(0), _nglyphs(-1),
+ _got_glyph_names(false), _ttb_program(0)
+{
+ cmap = new Efont::OpenType::Cmap(otf->table("cmap"), errh);
+ assert(cmap->ok());
+
+ if (String cff_string = otf->table("CFF")) {
+ cff_file = new Efont::Cff(cff_string, errh);
+ if (!cff_file->ok())
+ return;
+ Efont::Cff::FontParent *fp = cff_file->font(PermString(), errh);
+ if (!fp || !fp->ok())
+ return;
+ if (!(cff = dynamic_cast<Efont::Cff::Font *>(fp))) {
+ errh->error("CID-keyed fonts not supported");
+ return;
+ }
+ _nglyphs = cff->nglyphs();
+ }
+
+ if (!cff) {
+ post = new Efont::OpenType::Post(otf->table("post"), errh);
+ // read number of glyphs from 'maxp' -- should probably be elsewhere
+ if (Efont::OpenType::Data maxp = otf->table("maxp"))
+ if (maxp.length() >= 6)
+ _nglyphs = maxp.u16(4);
+ if (_nglyphs < 0 && post->ok())
+ _nglyphs = post->nglyphs();
+ }
+
+ name = new Efont::OpenType::Name(otf->table("name"), errh);
+}
+
+FontInfo::~FontInfo()
+{
+ delete cmap;
+ delete cff_file;
+ delete cff;
+ delete post;
+ delete name;
+ delete _ttb_program;
+}
+
+bool
+FontInfo::ok() const
+{
+ if (cff)
+ return cmap->ok() && cff->ok();
+ else
+ return post && post->ok() && name && name->ok();
+}
+
+bool
+FontInfo::glyph_names(Vector<PermString> &glyph_names) const
+{
+ program()->glyph_names(glyph_names);
+ return true;
+}
+
+int
+FontInfo::glyphid(PermString name) const
+{
+ if (cff)
+ return cff->glyphid(name);
+ else {
+ if (!_got_glyph_names) {
+ glyph_names(_glyph_names);
+ _got_glyph_names = true;
+ }
+ PermString *found = std::find(_glyph_names.begin(), _glyph_names.end(), name);
+ if (found == _glyph_names.end())
+ return 0;
+ return found - _glyph_names.begin();
+ }
+}
+
+String
+FontInfo::family_name() const
+{
+ if (cff)
+ return cff->dict_string(Efont::Cff::oFamilyName);
+ else
+ return name->english_name(Efont::OpenType::Name::N_FAMILY);
+}
+
+String
+FontInfo::postscript_name() const
+{
+ if (cff)
+ return cff->font_name();
+ else
+ return name->english_name(Efont::OpenType::Name::N_POSTSCRIPT);
+}
+
+const Efont::CharstringProgram *
+FontInfo::program() const
+{
+ if (cff)
+ return cff;
+ else {
+ if (!_ttb_program)
+ _ttb_program = new Efont::TrueTypeBoundsCharstringProgram(otf);
+ return _ttb_program;
+ }
+}
+
+bool
+FontInfo::is_fixed_pitch() const
+{
+ if (cff) {
+ double d;
+ return (cff->dict_value(Efont::Cff::oIsFixedPitch, &d) && d);
+ } else
+ return post->is_fixed_pitch();
+}
+
+double
+FontInfo::italic_angle() const
+{
+ if (cff) {
+ double d;
+ (void) cff->dict_value(Efont::Cff::oItalicAngle, &d);
+ return d;
+ } else
+ return post->italic_angle();
+}
+
+
+/* */
Secondary::~Secondary()
{
@@ -149,16 +291,16 @@ T1Secondary::encode_uni(int code, PermString name, uint32_t uni, Metrics &metric
static String dotlessj_file_name;
-static void
-dotlessj_dvips_include(const String &, StringAccum &sa, ErrorHandler *)
+static String
+dotlessj_dvips_include(const String &, const FontInfo &, ErrorHandler *)
{
- sa << '<' << pathname_filename(dotlessj_file_name);
+ return "<" + pathname_filename(dotlessj_file_name);
}
int
T1Secondary::dotlessj_font(Metrics &metrics, ErrorHandler *errh, Glyph &dj_glyph)
{
- if (!_font_name || !_finfo.otf)
+ if (!_font_name || !_finfo.otf || !_finfo.cff)
return -1;
String dj_name = suffix_font_name(_font_name, "--lcdfj");
@@ -166,7 +308,7 @@ T1Secondary::dotlessj_font(Metrics &metrics, ErrorHandler *errh, Glyph &dj_glyph
if (metrics.mapped_font_name(i) == dj_name)
return i;
- if (String filename = installed_type1_dotlessj(_otf_file_name, _finfo.cff->font_name(), (output_flags & G_DOTLESSJ) && (output_flags & G_TYPE1), errh)) {
+ if (String filename = installed_type1_dotlessj(_otf_file_name, _finfo.cff->font_name(), (output_flags & G_DOTLESSJ), errh)) {
// check for special case: "\0" means the font's "j" is already
// dotless
@@ -307,7 +449,8 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
break;
case U_DOTLESSJ:
- case U_DOTLESSJ_2: {
+ case U_DOTLESSJ_2:
+ case U_MATHDOTLESSJ: {
Glyph dj_glyph;
int which = dotlessj_font(metrics, errh, dj_glyph);
if (which >= 0) {
@@ -321,9 +464,8 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
case U_DBLBRACKETLEFT:
if (char_setting(v, metrics, '[', 0)) {
- double d;
- if (!_finfo.cff->dict_value(Efont::Cff::oIsFixedPitch, &d) || !d) {
- d = char_one_bound(_finfo, xform, 4, true, 0, '[', 0);
+ if (!_finfo.is_fixed_pitch()) {
+ double d = char_one_bound(_finfo, xform, 4, true, 0, '[', 0);
v.push_back(Setting(Setting::MOVE, (int) (-0.666 * d), 0));
}
char_setting(v, metrics, '[', 0);
@@ -333,9 +475,8 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
case U_DBLBRACKETRIGHT:
if (char_setting(v, metrics, ']', 0)) {
- double d;
- if (!_finfo.cff->dict_value(Efont::Cff::oIsFixedPitch, &d) || !d) {
- d = char_one_bound(_finfo, xform, 4, true, 0, ']', 0);
+ if (!_finfo.is_fixed_pitch()) {
+ double d = char_one_bound(_finfo, xform, 4, true, 0, ']', 0);
v.push_back(Setting(Setting::MOVE, (int) (-0.666 * d), 0));
}
char_setting(v, metrics, ']', 0);
@@ -345,9 +486,8 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
case U_BARDBL:
if (char_setting(v, metrics, '|', 0)) {
- double d;
- if (!_finfo.cff->dict_value(Efont::Cff::oIsFixedPitch, &d) || !d) {
- d = char_one_bound(_finfo, Transform(), 4, true, 0, '|', 0);
+ if (!_finfo.is_fixed_pitch()) {
+ double d = char_one_bound(_finfo, Transform(), 4, true, 0, '|', 0);
v.push_back(Setting(Setting::MOVE, (int) (-0.333 * d), 0));
}
char_setting(v, metrics, '|', 0);
@@ -370,9 +510,8 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
case U_TWELVEUDASH:
if (char_setting(v, metrics, U_ENDASH, 0)) {
- double d;
- if (!_finfo.cff->dict_value(Efont::Cff::oIsFixedPitch, &d) || !d) {
- d = char_one_bound(_finfo, xform, 4, true, 0, U_ENDASH, 0);
+ if (!_finfo.is_fixed_pitch()) {
+ double d = char_one_bound(_finfo, xform, 4, true, 0, U_ENDASH, 0);
v.push_back(Setting(Setting::MOVE, (int) (667 - 2 * d), 0));
}
char_setting(v, metrics, U_ENDASH, 0);
@@ -382,9 +521,8 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
case U_THREEQUARTERSEMDASH:
if (char_setting(v, metrics, U_ENDASH, 0)) {
- double d;
- if (!_finfo.cff->dict_value(Efont::Cff::oIsFixedPitch, &d) || !d) {
- d = char_one_bound(_finfo, xform, 4, true, 0, U_ENDASH, 0);
+ if (!_finfo.is_fixed_pitch()) {
+ double d = char_one_bound(_finfo, xform, 4, true, 0, U_ENDASH, 0);
v.push_back(Setting(Setting::MOVE, (int) (750 - 2 * d), 0));
}
char_setting(v, metrics, U_ENDASH, 0);
@@ -431,6 +569,25 @@ T1Secondary::setting(uint32_t uni, Vector<Setting> &v, Metrics &metrics, ErrorHa
return true;
break;
+ case U_RINGFITTED: {
+ int A_width = char_one_bound(_finfo, xform, 4, true, -1000, 'A', 0);
+ uint32_t ring_char = U_RINGABOVE;
+ int ring_width = char_one_bound(_finfo, xform, 4, true, -1000, ring_char, 0);
+ if (ring_width <= -1000) {
+ ring_char = U_COMBININGRINGABOVE;
+ ring_width = char_one_bound(_finfo, xform, 4, true, -1000, ring_char, 0);
+ }
+ if (A_width > -1000 && ring_width > -1000) {
+ int offset = (A_width - ring_width) / 2;
+ v.push_back(Setting(Setting::MOVE, offset, 0));
+ if (char_setting(v, metrics, ring_char, 0)) {
+ v.push_back(Setting(Setting::MOVE, A_width - ring_width - offset, 0));
+ return true;
+ }
+ }
+ break;
+ }
+
}
// didn't find a good setting, restore v to pristine state
@@ -451,7 +608,7 @@ char_bounds(int bounds[4], int &width, const FontInfo &finfo,
const Transform &transform, uint32_t uni)
{
if (Efont::OpenType::Glyph g = finfo.cmap->map_uni(uni))
- return Efont::CharstringBounds::bounds(transform, finfo.cff->glyph_context(g), bounds, width);
+ return Efont::CharstringBounds::bounds(transform, finfo.program()->glyph_context(g), bounds, width);
else
return false;
}
@@ -493,7 +650,7 @@ font_cap_height(const FontInfo &finfo, const Transform &font_xform)
Efont::OpenType::Os2 os2(finfo.otf->table("OS/2"));
return os2.cap_height();
} catch (Efont::OpenType::Bounds) {
- // XXX what if 'x', 'm', 'z' were subject to substitution?
+ // XXX what if 'H', 'O', 'B' were subject to substitution?
return char_one_bound(finfo, font_xform, 3, false, 1000,
'H', 'O', 'B', 0);
}
@@ -506,7 +663,7 @@ font_ascender(const FontInfo &finfo, const Transform &font_xform)
Efont::OpenType::Os2 os2(finfo.otf->table("OS/2"));
return os2.typo_ascender();
} catch (Efont::OpenType::Bounds) {
- // XXX what if 'x', 'm', 'z' were subject to substitution?
+ // XXX what if 'd', 'l' were subject to substitution?
return char_one_bound(finfo, font_xform, 3, true,
font_x_height(finfo, font_xform),
'd', 'l', 0);
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/secondary.hh b/Build/source/utils/lcdf-typetools/otftotfm/secondary.hh
index c4914d248a3..a4abd36f352 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/secondary.hh
+++ b/Build/source/utils/lcdf-typetools/otftotfm/secondary.hh
@@ -5,11 +5,43 @@
class Metrics;
class Transform;
struct Setting;
+namespace Efont { class TrueTypeBoundsCharstringProgram; }
struct FontInfo {
+
const Efont::OpenType::Font *otf;
- const Efont::Cff::Font *cff;
const Efont::OpenType::Cmap *cmap;
+
+ Efont::Cff *cff_file;
+ const Efont::Cff::Font *cff;
+
+ const Efont::OpenType::Post *post;
+ const Efont::OpenType::Name *name;
+
+ FontInfo(const Efont::OpenType::Font *otf, ErrorHandler *);
+ ~FontInfo();
+
+ bool ok() const;
+
+ int nglyphs() const { return _nglyphs; }
+ bool glyph_names(Vector<PermString> &) const;
+ int glyphid(PermString) const;
+ const Efont::CharstringProgram *program() const;
+
+ bool is_fixed_pitch() const;
+ double italic_angle() const;
+
+ String family_name() const;
+ String postscript_name() const;
+
+ private:
+
+ int _nglyphs;
+ mutable Vector<PermString> _glyph_names;
+ mutable bool _got_glyph_names;
+ mutable Vector<uint32_t> _unicodes;
+ mutable Efont::TrueTypeBoundsCharstringProgram *_ttb_program;
+
};
class Secondary { public:
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/uniprop.cc b/Build/source/utils/lcdf-typetools/otftotfm/uniprop.cc
index c3af4c69dbe..b4975d1dfa1 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/uniprop.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/uniprop.cc
@@ -1,6 +1,6 @@
/* uniprop.{cc,hh} -- code for Unicode character properties
*
- * Copyright (c) 2004 Eddie Kohler
+ * Copyright (c) 2004-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/util.cc b/Build/source/utils/lcdf-typetools/otftotfm/util.cc
index 6e5bdbc47a1..7628e9063ca 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/util.cc
+++ b/Build/source/utils/lcdf-typetools/otftotfm/util.cc
@@ -1,6 +1,6 @@
/* util.{cc,hh} -- various bits
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -165,16 +165,16 @@ temporary_file(String &filename, ErrorHandler *errh)
bool
parse_unicode_number(const char* begin, const char* end, int require_prefix, uint32_t& result)
{
- bool allow_lower = false;
+ bool allow_lower = (require_prefix == 1);
if (require_prefix < 0)
/* do not look for prefix */;
else if (begin + 7 == end && begin[0] == 'u' && begin[1] == 'n' && begin[2] == 'i')
begin += 3;
else if (begin + 5 <= end && begin + 7 >= end && begin[0] == 'u')
begin++;
- else if (begin + 6 <= end && begin + 8 >= end && begin[0] == 'U' && begin[1] == '+')
+ else if (begin + 3 <= end && begin + 8 >= end && begin[0] == 'U' && begin[1] == '+')
begin += 2, allow_lower = true;
- else if (require_prefix > 0)
+ else if (require_prefix > 1)
/* some prefix was required */
return false;
diff --git a/Build/source/utils/lcdf-typetools/otftotfm/util.hh b/Build/source/utils/lcdf-typetools/otftotfm/util.hh
index ee0abaa0a10..a0f37c14105 100644
--- a/Build/source/utils/lcdf-typetools/otftotfm/util.hh
+++ b/Build/source/utils/lcdf-typetools/otftotfm/util.hh
@@ -10,7 +10,7 @@ extern bool force;
enum { G_ENCODING = 1, G_METRICS = 2, G_VMETRICS = 4, G_TYPE1 = 8,
G_PSFONTSMAP = 16, G_BINARY = 32, G_ASCII = 64, G_DOTLESSJ = 128,
- G_UPDMAP = 256 };
+ G_UPDMAP = 256, G_TRUETYPE = 512 };
extern int output_flags;
diff --git a/Build/source/utils/lcdf-typetools/t1dotlessj/Makefile.in b/Build/source/utils/lcdf-typetools/t1dotlessj/Makefile.in
index b57c46cc653..190e256e6a5 100644
--- a/Build/source/utils/lcdf-typetools/t1dotlessj/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/t1dotlessj/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(t1dotlessj_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.1 b/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.1
index fd5778f88a3..832624ff117 100644
--- a/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.1
+++ b/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.1
@@ -1,4 +1,4 @@
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -93,4 +93,4 @@ An error occurred.
.I "Adobe Type 1 Font Format"
'
.SH AUTHOR
-Eddie Kohler (kohler@icir.org)
+Eddie Kohler (kohler@cs.ucla.edu)
diff --git a/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.cc b/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.cc
index 2619372cf0b..8206414a1fc 100644
--- a/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.cc
+++ b/Build/source/utils/lcdf-typetools/t1dotlessj/t1dotlessj.cc
@@ -1,6 +1,6 @@
/* t1dotlessj.cc -- driver for creating dotlessj characters from Type 1 fonts
*
- * Copyright (c) 2003-2004 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
@@ -282,7 +282,7 @@ main(int argc, char *argv[])
if (clp->negated)
errh = ErrorHandler::default_handler();
else
- errh = ErrorHandler::silent_handler();
+ errh = new SilentErrorHandler;
break;
case NAME_OPT:
@@ -309,7 +309,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("t1dotlessj (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 2003-2004 Eddie Kohler\n\
+ printf("Copyright (C) 2003-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
@@ -353,6 +353,8 @@ particular purpose.\n");
errh->fatal(EXIT_DOTLESSJ_EXISTS, "%s: already has a 'dotlessj' glyph", font->font_name().c_str());
else if (font->glyph("uni0237"))
errh->fatal(EXIT_DOTLESSJ_EXISTS, "%s: already has a dotlessj glyph at 'uni0237'", font->font_name().c_str());
+ else if (font->glyph("u0237"))
+ errh->fatal(EXIT_DOTLESSJ_EXISTS, "%s: already has a dotlessj glyph at 'u0237'", font->font_name().c_str());
else if (private_use_dotlessj && font->glyph(private_use_dotlessj))
errh->fatal(EXIT_DOTLESSJ_EXISTS, "%s: already has a dotlessj glyph at '%s'", font->font_name().c_str(), private_use_dotlessj);
diff --git a/Build/source/utils/lcdf-typetools/t1lint/Makefile.in b/Build/source/utils/lcdf-typetools/t1lint/Makefile.in
index 828293db962..39ce4541a67 100644
--- a/Build/source/utils/lcdf-typetools/t1lint/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/t1lint/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(t1lint_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/t1lint/cscheck.cc b/Build/source/utils/lcdf-typetools/t1lint/cscheck.cc
index 27f63b4b0a7..99cac139af5 100644
--- a/Build/source/utils/lcdf-typetools/t1lint/cscheck.cc
+++ b/Build/source/utils/lcdf-typetools/t1lint/cscheck.cc
@@ -1,6 +1,6 @@
/* cscheck.{cc,hh} -- checking Type 1 charstrings for validity
*
- * Copyright (c) 1999-2005 Eddie Kohler
+ * Copyright (c) 1999-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/t1lint/t1lint.1 b/Build/source/utils/lcdf-typetools/t1lint/t1lint.1
index 54077ee6728..e7638848de1 100644
--- a/Build/source/utils/lcdf-typetools/t1lint/t1lint.1
+++ b/Build/source/utils/lcdf-typetools/t1lint/t1lint.1
@@ -1,4 +1,4 @@
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -45,4 +45,4 @@ Print the version number and some short non-warranty information and exit.
.I "Adobe Type 1 Font Format"
'
.SH AUTHOR
-Eddie Kohler (kohler@icir.org)
+Eddie Kohler (kohler@cs.ucla.edu)
diff --git a/Build/source/utils/lcdf-typetools/t1lint/t1lint.cc b/Build/source/utils/lcdf-typetools/t1lint/t1lint.cc
index 2e398a4bccd..e0f3a7425a9 100644
--- a/Build/source/utils/lcdf-typetools/t1lint/t1lint.cc
+++ b/Build/source/utils/lcdf-typetools/t1lint/t1lint.cc
@@ -1,6 +1,6 @@
/* t1lint.cc -- driver for checking Type 1 fonts for validity
*
- * Copyright (c) 1999-2005 Eddie Kohler
+ * Copyright (c) 1999-2006 Eddie Kohler
*
* This program 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
@@ -391,15 +391,15 @@ main(int argc, char *argv[])
switch (opt) {
case QUIET_OPT:
- if (clp->negated)
- errh = ErrorHandler::default_handler();
- else
- errh = ErrorHandler::silent_handler();
- break;
+ if (clp->negated)
+ errh = ErrorHandler::default_handler();
+ else
+ errh = new SilentErrorHandler;
+ break;
case VERSION_OPT:
printf("t1lint (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 1999-2005 Eddie Kohler\n\
+ printf("Copyright (C) 1999-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
diff --git a/Build/source/utils/lcdf-typetools/t1reencode/Makefile.in b/Build/source/utils/lcdf-typetools/t1reencode/Makefile.in
index 3ee48aec649..e75edbfa5e5 100644
--- a/Build/source/utils/lcdf-typetools/t1reencode/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/t1reencode/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(t1reencode_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.1 b/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.1
index 784a329a0e9..354c2b540ff 100644
--- a/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.1
+++ b/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.1
@@ -1,4 +1,4 @@
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -34,9 +34,65 @@ which must contain an encoding in
.M dvips 1
format. Alternatively,
.I file
-can be one of "StandardEncoding", "ISOLatin1Encoding", "ExpertEncoding",
-"ExpertSubsetEncoding", or "SymbolEncoding", in which case the
-corresponding standard encoding is used.
+can be one of the following special names, in which case the corresponding
+standard encoding is used.
+.Sp
+.RS
+.TP 23
+.B Name
+.B Source
+.TP
+StandardEncoding
+Adobe
+.TP
+ISOLatin1Encoding
+Adobe/ISO (synonym: ISO_8859_1_Encoding)
+.TP
+ExpertEncoding
+Adobe
+.TP
+ExpertSubsetEncoding
+Adobe
+.TP
+SymbolEncoding
+Adobe
+.TP
+ISOLatin2Encoding
+ISO (synonym: ISO_8859_2_Encoding)
+.TP
+ISOLatin3Encoding
+ISO (synonym: ISO_8859_3_Encoding)
+.TP
+ISOLatin4Encoding
+ISO (synonym: ISO_8859_4_Encoding)
+.TP
+ISOCyrillicEncoding
+ISO (synonym: ISO_8859_5_Encoding)
+.TP
+ISOGreekEncoding
+ISO (synonym: ISO_8859_7_Encoding)
+.TP
+ISOLatin5Encoding
+ISO (synonym: ISO_8859_9_Encoding)
+.TP
+ISOLatin6Encoding
+ISO (synonym: ISO_8859_10_Encoding)
+.TP
+ISOThaiEncoding
+ISO (synonym: ISO_8859_11_Encoding)
+.TP
+ISOLatin7Encoding
+ISO (synonym: ISO_8859_13_Encoding)
+.TP
+ISOLatin8Encoding
+ISO (synonym: ISO_8859_14_Encoding)
+.TP
+ISOLatin9Encoding
+ISO (synonym: ISO_8859_15_Encoding)
+.TP
+KOI8REncoding
+-
+.RE
'
.Sp
.TP 5
diff --git a/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.cc b/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.cc
index 142f61333e6..0b561864cf1 100644
--- a/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.cc
+++ b/Build/source/utils/lcdf-typetools/t1reencode/t1reencode.cc
@@ -1,6 +1,6 @@
/* t1reencode.cc -- driver for reencoding Type 1 fonts
*
- * Copyright (c) 2005 Eddie Kohler
+ * Copyright (c) 2005-2006 Eddie Kohler
*
* This program 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
@@ -103,6 +103,426 @@ static const char ISOLatin1Encoding[] = "/ISOLatin1Encoding [\n\
/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn\n\
] def\n";
+static const char ISOLatin2Encoding[] = "/ISOLatin2Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /Aogonek /breve /Lslash /currency /Lcaron /Sacute /section\n\
+ /dieresis /Scaron /Scedilla /Tcaron /Zacute /uni00AD /Zcaron /Zdotaccent\n\
+ /degree /aogonek /ogonek /lslash /acute /lcaron /sacute /caron\n\
+ /cedilla /scaron /scedilla /tcaron /zacute /hungarumlaut /zcaron /zdotaccent\n\
+ /Racute /Aacute /Acircumflex /Abreve /Adieresis /Lacute /Cacute /Ccedilla\n\
+ /Ccaron /Eacute /Eogonek /Edieresis /Ecaron /Iacute /Icircumflex /Dcaron\n\
+ /Dcroat /Nacute /Ncaron /Oacute /Ocircumflex /Ohungarumlaut /Odieresis /multiply\n\
+ /Rcaron /Uring /Uacute /Uhungarumlaut /Udieresis /Yacute /uni0162 /germandbls\n\
+ /racute /aacute /acircumflex /abreve /adieresis /lacute /cacute /ccedilla\n\
+ /ccaron /eacute /eogonek /edieresis /ecaron /iacute /icircumflex /dcaron\n\
+ /dcroat /nacute /ncaron /oacute /ocircumflex /ohungarumlaut /odieresis /divide\n\
+ /rcaron /uring /uacute /uhungarumlaut /udieresis /yacute /uni0163 /dotaccent\n\
+] def\n";
+
+static const char ISOLatin3Encoding[] = "/ISOLatin3Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /Hbar /breve /sterling /currency /yen /Hcircumflex /section\n\
+ /dieresis /Idotaccent /Scedilla /Gbreve /Jcircumflex /uni00AD /registered /Zdotaccent\n\
+ /degree /hbar /twosuperior /threesuperior /acute /mu /hcircumflex /periodcentered\n\
+ /cedilla /dotlessi /scedilla /gbreve /jcircumflex /onehalf /threequarters /zdotaccent\n\
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Cdotaccent /Ccircumflex /Ccedilla\n\
+ /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis\n\
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Gdotaccent /Odieresis /multiply\n\
+ /Gcircumflex /Ugrave /Uacute /Ucircumflex /Udieresis /Ubreve /Scircumflex /germandbls\n\
+ /agrave /aacute /acircumflex /atilde /adieresis /cdotaccent /ccircumflex /ccedilla\n\
+ /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis\n\
+ /eth /ntilde /ograve /oacute /ocircumflex /gdotaccent /odieresis /divide\n\
+ /gcircumflex /ugrave /uacute /ucircumflex /udieresis /ubreve /scircumflex /dotaccent\n\
+] def\n";
+
+static const char ISOLatin4Encoding[] = "/ISOLatin4Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /Aogonek /kgreenlandic /Rcommaaccent /currency /Itilde /Lcommaaccent /section\n\
+ /dieresis /Scaron /Emacron /Gcommaaccent /Tbar /uni00AD /Zcaron /macron\n\
+ /degree /aogonek /ogonek /rcommaaccent /acute /itilde /lcommaaccent /caron\n\
+ /cedilla /scaron /emacron /gcommaaccent /tbar /Eng /zcaron /eng\n\
+ /Amacron /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Iogonek\n\
+ /Ccaron /Eacute /Eogonek /Edieresis /Edotaccent /Iacute /Icircumflex /Imacron\n\
+ /Dcroat /Ncommaaccent /Omacron /Kcommaaccent /Ocircumflex /Otilde /Odieresis /multiply\n\
+ /Oslash /Uogonek /Uacute /Ucircumflex /Udieresis /Utilde /Umacron /germandbls\n\
+ /amacron /aacute /acircumflex /atilde /adieresis /aring /ae /iogonek\n\
+ /ccaron /eacute /eogonek /edieresis /edotaccent /iacute /icircumflex /imacron\n\
+ /dcroat /ncommaaccent /omacron /kcommaaccent /ocircumflex /otilde /odieresis /divide\n\
+ /oslash /uogonek /uacute /ucircumflex /udieresis /utilde /umacron /dotaccent\n\
+] def\n";
+
+static const char ISOCyrillicEncoding[] = "/ISOCyrillicEncoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /afii10023 /afii10051 /afii10052 /afii10053 /afii10054 /afii10055 /afii10056\n\
+ /afii10057 /afii10058 /afii10059 /afii10060 /afii10061 /uni00AD /afii10062 /afii10145\n\
+ /afii10017 /afii10018 /afii10019 /afii10020 /afii10021 /afii10022 /afii10024 /afii10025\n\
+ /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032 /afii10033\n\
+ /afii10034 /afii10035 /afii10036 /afii10037 /afii10038 /afii10039 /afii10040 /afii10041\n\
+ /afii10042 /afii10043 /afii10044 /afii10045 /afii10046 /afii10047 /afii10048 /afii10049\n\
+ /afii10065 /afii10066 /afii10067 /afii10068 /afii10069 /afii10070 /afii10072 /afii10073\n\
+ /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080 /afii10081\n\
+ /afii10082 /afii10083 /afii10084 /afii10085 /afii10086 /afii10087 /afii10088 /afii10089\n\
+ /afii10090 /afii10091 /afii10092 /afii10093 /afii10094 /afii10095 /afii10096 /afii10097\n\
+ /afii61352 /afii10071 /afii10099 /afii10100 /afii10101 /afii10102 /afii10103 /afii10104\n\
+ /afii10105 /afii10106 /afii10107 /afii10108 /afii10109 /section /afii10110 /afii10193\n\
+] def\n";
+
+static const char ISOGreekEncoding[] = "/ISOGreekEncoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /afii64937 /afii57929 /sterling /currency /yen /brokenbar /section\n\
+ /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /afii00208\n\
+ /degree /plusminus /twosuperior /threesuperior /tonos /dieresistonos /Alphatonos /periodcentered\n\
+ /Epsilontonos /Etatonos /Iotatonos /guillemotright /Omicrontonos /onehalf /Upsilontonos /Omegatonos\n\
+ /iotadieresistonos /Alpha /Beta /Gamma /uni0394 /Epsilon /Zeta /Eta\n\
+ /Theta /Iota /Kappa /Lambda /Mu /Nu /Xi /Omicron\n\
+ /Pi /Rho /Ograve /Sigma /Tau /Upsilon /Phi /Chi\n\
+ /Psi /uni03A9 /Iotadieresis /Upsilondieresis /alphatonos /epsilontonos /etatonos /iotatonos\n\
+ /upsilondieresistonos /alpha /beta /gamma /delta /epsilon /zeta /eta\n\
+ /theta /iota /kappa /lambda /uni03BC /nu /xi /omicron\n\
+ /pi /rho /sigma1 /sigma /tau /upsilon /phi /chi\n\
+ /psi /omega /iotadieresis /upsilondieresis /omicrontonos /upsilontonos /omegatonos /ydieresis\n\
+] def\n";
+
+static const char ISOLatin5Encoding[] = "/ISOLatin5Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /exclamdown /cent /sterling /currency /yen /brokenbar /section\n\
+ /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron\n\
+ /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered\n\
+ /cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown\n\
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla\n\
+ /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis\n\
+ /Gbreve /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply\n\
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Idotaccent /Scedilla /germandbls\n\
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla\n\
+ /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis\n\
+ /gbreve /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide\n\
+ /oslash /ugrave /uacute /ucircumflex /udieresis /dotlessi /scedilla /ydieresis\n\
+] def\n";
+
+static const char ISOLatin6Encoding[] = "/ISOLatin6Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /Aogonek /Emacron /Gcommaaccent /Imacron /Itilde /Kcommaaccent /section\n\
+ /Lcommaaccent /Dcroat /Scaron /Tbar /Zcaron /uni00AD /Umacron /Eng\n\
+ /degree /aogonek /emacron /gcommaaccent /imacron /itilde /kcommaaccent /periodcentered\n\
+ /lcommaaccent /dcroat /scaron /tbar /zcaron /macron /umacron /eng\n\
+ /Amacron /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Iogonek\n\
+ /Ccaron /Eacute /Eogonek /Edieresis /Emacron /Iacute /Icircumflex /Idieresis\n\
+ /Eth /Ncommaaccent /Omacron /Oacute /Ocircumflex /Otilde /Odieresis /Utilde\n\
+ /Oslash /Uogonek /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls\n\
+ /amacron /aacute /acircumflex /atilde /adieresis /aring /ae /iogonek\n\
+ /ccaron /eacute /eogonek /edieresis /emacron /iacute /icircumflex /idieresis\n\
+ /eth /ncommaaccent /omacron /oacute /ocircumflex /otilde /odieresis /utilde\n\
+ /oslash /uogonek /uacute /ucircumflex /udieresis /yacute /thorn /kgreenlandic\n\
+] def\n";
+
+static const char ISOThaiEncoding[] = "/ISOThaiEncoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /uni0E01 /uni0E02 /uni0E03 /uni0E04 /uni0E05 /uni0E06 /uni0E07\n\
+ /uni0E08 /uni0E09 /uni0E0A /uni0E0B /uni0E0C /uni0E0D /uni0E0E /uni0E0F\n\
+ /uni0E10 /uni0E11 /uni0E12 /uni0E13 /uni0E14 /uni0E15 /uni0E16 /uni0E17\n\
+ /uni0E18 /uni0E19 /uni0E1A /uni0E1B /uni0E1C /uni0E1D /uni0E1E /uni0E1F\n\
+ /uni0E20 /uni0E21 /uni0E22 /uni0E23 /uni0E24 /uni0E25 /uni0E26 /uni0E27\n\
+ /uni0E28 /uni0E29 /uni0E2A /uni0E2B /uni0E2C /uni0E2D /uni0E2E /uni0E2F\n\
+ /uni0E30 /uni0E31 /uni0E32 /uni0E33 /uni0E34 /uni0E35 /uni0E36 /uni0E37\n\
+ /uni0E38 /uni0E39 /uni0E3A /.notdef /space /.notdef /.notdef /uni0E3F\n\
+ /uni0E40 /uni0E41 /uni0E42 /uni0E43 /uni0E44 /uni0E45 /uni0E46 /uni0E47\n\
+ /uni0E48 /uni0E49 /uni0E4A /uni0E4B /uni0E4C /uni0E4D /uni0E4E /uni0E4F\n\
+ /uni0E50 /uni0E51 /uni0E52 /uni0E53 /uni0E54 /uni0E55 /uni0E56 /uni0E57\n\
+ /uni0E58 /uni0E59 /uni0E5A /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+] def\n";
+
+static const char ISOLatin7Encoding[] = "/ISOLatin7Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /quotedblright /cent /sterling /currency /quotedblbase /brokenbar /section\n\
+ /Oslash /copyright /rcommaaccent /guillemotleft /logicalnot /uni00AD /registered /AE\n\
+ /degree /plusminus /twosuperior /threesuperior /quotedblleft /mu /paragraph /periodcentered\n\
+ /oslash /onesuperior /.notdef /guillemotright /onequarter /onehalf /threequarters /ae\n\
+ /Aogonek /Iogonek /Amacron /Cacute /Adieresis /Aring /Eogonek /Emacron\n\
+ /Ccaron /Eacute /Zacute /Edotaccent /Gcommaaccent /Kcommaaccent /Imacron /Lcommaaccent\n\
+ /Scaron /Nacute /Ncommaaccent /Oacute /Omacron /Otilde /Odieresis /multiply\n\
+ /Uogonek /Lslash /Uacute /Ucircumflex /Udieresis /Zdotaccent /Zcaron /germandbls\n\
+ /aogonek /Iogonek /amacron /cacute /adieresis /aring /eogonek /emacron\n\
+ /ccaron /eacute /zacute /edotaccent /gcommaaccent /kcommaaccent /imacron /lcommaaccent\n\
+ /scaron /nacute /ncommaaccent /oacute /omacron /otilde /odieresis /divide\n\
+ /uogonek /lslash /uacute /ucircumflex /udieresis /zdotaccent /zcaron /quoteright\n\
+] def\n";
+
+static const char ISOLatin8Encoding[] = "/ISOLatin8Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /uni1E02 /uni1E03 /sterling /Cdotaccent /cdotaccent /uni1E0A /section\n\
+ /Wgrave /copyright /Wacute /uni1E0B /Ygrave /uni00AD /registered /Ydieresis\n\
+ /uni1E1E /uni1E1F /Gdotaccent /gdotaccent /uni1E40 /uni1E41 /paragraph /uni1E56\n\
+ /wgrave /uni1E57 /wacute /uni1E60 /ygrave /Wdieresis /wdieresis /uni1E61\n\
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla\n\
+ /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis\n\
+ /Wcircumflex /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /uni1E6A\n\
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Ycircumflex /germandbls\n\
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla\n\
+ /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis\n\
+ /wcircumflex /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /uni1E6B\n\
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /ycircumflex /ydieresis\n\
+] def\n";
+
+static const char ISOLatin9Encoding[] = "/ISOLatin9Encoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /uni00A0 /exclamdown /cent /sterling /Euro /yen /Scaron /section\n\
+ /scaron /copyright /ordfeminine /guillemotleft /logicalnot /uni00AD /registered /macron\n\
+ /degree /plusminus /twosuperior /threesuperior /Zcaron /mu /paragraph /periodcentered\n\
+ /zcaron /onesuperior /ordmasculine /guillemotright /OE /oe /Ydieresis /questiondown\n\
+ /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla\n\
+ /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis\n\
+ /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply\n\
+ /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls\n\
+ /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla\n\
+ /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis\n\
+ /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide\n\
+ /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis\n\
+] def\n";
+
+static const char KOI8REncoding[] = "/KOI8REncoding [\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
+ /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle\n\
+ /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash\n\
+ /zero /one /two /three /four /five /six /seven\n\
+ /eight /nine /colon /semicolon /less /equal /greater /question\n\
+ /at /A /B /C /D /E /F /G\n\
+ /H /I /J /K /L /M /N /O\n\
+ /P /Q /R /S /T /U /V /W\n\
+ /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore\n\
+ /grave /a /b /c /d /e /f /g\n\
+ /h /i /j /k /l /m /n /o\n\
+ /p /q /r /s /t /u /v /w\n\
+ /x /y /z /braceleft /bar /braceright /asciitilde /.notdef\n\
+ /SF100000 /SF110000 /SF010000 /SF030000 /SF020000 /SF040000 /SF080000 /SF090000\n\
+ /SF060000 /SF070000 /SF050000 /upblock /dnblock /block /lfblock /rtblock\n\
+ /ltshade /shade /dkshade /integraltp /filledbox /uni2219 /radical /approxequal\n\
+ /lessequal /greaterequal /uni00A0 /integralbt /degree /twosuperior /periodcentered /divide\n\
+ /SF430000 /SF240000 /SF510000 /afii10071 /SF520000 /SF390000 /SF220000 /SF210000\n\
+ /SF250000 /SF500000 /SF490000 /SF380000 /SF280000 /SF270000 /SF260000 /SF360000\n\
+ /SF370000 /SF420000 /SF190000 /afii10023 /SF200000 /SF230000 /SF470000 /SF480000\n\
+ /SF410000 /SF450000 /SF460000 /SF400000 /SF540000 /SF530000 /SF440000 /copyright\n\
+ /afii10096 /afii10065 /afii10066 /afii10088 /afii10069 /afii10070 /afii10086 /afii10068\n\
+ /afii10087 /afii10074 /afii10075 /afii10076 /afii10077 /afii10078 /afii10079 /afii10080\n\
+ /afii10081 /afii10097 /afii10082 /afii10083 /afii10084 /afii10085 /afii10072 /afii10067\n\
+ /afii10094 /afii10093 /afii10073 /afii10090 /afii10095 /afii10091 /afii10089 /afii10092\n\
+ /afii10048 /afii10017 /afii10018 /afii10040 /afii10021 /afii10022 /afii10038 /afii10020\n\
+ /afii10039 /afii10026 /afii10027 /afii10028 /afii10029 /afii10030 /afii10031 /afii10032\n\
+ /afii10033 /afii10049 /afii10034 /afii10035 /afii10036 /afii10037 /afii10024 /afii10019\n\
+ /afii10046 /afii10045 /afii10025 /afii10042 /afii10047 /afii10043 /afii10041 /afii10044\n\
+] def\n";
+
static const char ExpertEncoding[] = "/ExpertEncoding [\n\
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef\n\
@@ -562,7 +982,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("t1reencode (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 1999-2005 Eddie Kohler\n\
+ printf("Copyright (C) 1999-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
@@ -611,13 +1031,49 @@ particular purpose.\n");
encoding_name = encoding_file;
} else {
String text;
- if (encoding_file == "ISOLatin1Encoding")
+ if (strcmp(encoding_file, "ISOLatin1Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_1_Encoding") == 0)
text = String::stable_string(ISOLatin1Encoding);
- else if (encoding_file == "ExpertEncoding")
+ else if (strcmp(encoding_file, "ISOLatin2Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_2_Encoding") == 0)
+ text = String::stable_string(ISOLatin2Encoding);
+ else if (strcmp(encoding_file, "ISOLatin3Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_3_Encoding") == 0)
+ text = String::stable_string(ISOLatin3Encoding);
+ else if (strcmp(encoding_file, "ISOLatin4Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_4_Encoding") == 0)
+ text = String::stable_string(ISOLatin4Encoding);
+ else if (strcmp(encoding_file, "ISOCyrillicEncoding") == 0
+ || strcmp(encoding_file, "ISO_8859_5_Encoding") == 0)
+ text = String::stable_string(ISOCyrillicEncoding);
+ else if (strcmp(encoding_file, "ISOGreekEncoding") == 0
+ || strcmp(encoding_file, "ISO_8859_7_Encoding") == 0)
+ text = String::stable_string(ISOGreekEncoding);
+ else if (strcmp(encoding_file, "ISO_8859_9_Encoding") == 0
+ || strcmp(encoding_file, "ISOLatin5Encoding") == 0)
+ text = String::stable_string(ISOLatin5Encoding);
+ else if (strcmp(encoding_file, "ISOLatin6Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_10_Encoding") == 0)
+ text = String::stable_string(ISOLatin6Encoding);
+ else if (strcmp(encoding_file, "ISOThaiEncoding") == 0
+ || strcmp(encoding_file, "ISO_8859_11_Encoding") == 0)
+ text = String::stable_string(ISOThaiEncoding);
+ else if (strcmp(encoding_file, "ISOLatin7Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_13_Encoding") == 0)
+ text = String::stable_string(ISOLatin7Encoding);
+ else if (strcmp(encoding_file, "ISOLatin8Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_14_Encoding") == 0)
+ text = String::stable_string(ISOLatin8Encoding);
+ else if (strcmp(encoding_file, "ISOLatin9Encoding") == 0
+ || strcmp(encoding_file, "ISO_8859_15_Encoding") == 0)
+ text = String::stable_string(ISOLatin9Encoding);
+ else if (strcmp(encoding_file, "KOI8REncoding") == 0)
+ text = String::stable_string(KOI8REncoding);
+ else if (strcmp(encoding_file, "ExpertEncoding") == 0)
text = String::stable_string(ExpertEncoding);
- else if (encoding_file == "ExpertSubsetEncoding")
+ else if (strcmp(encoding_file, "ExpertSubsetEncoding") == 0)
text = String::stable_string(ExpertSubsetEncoding);
- else if (encoding_file == "SymbolEncoding")
+ else if (strcmp(encoding_file, "SymbolEncoding") == 0)
text = String::stable_string(SymbolEncoding);
else if (encoding_text)
text = String::stable_string(encoding_text), encoding_file = "<argument>";
diff --git a/Build/source/utils/lcdf-typetools/t1reencode/util.cc b/Build/source/utils/lcdf-typetools/t1reencode/util.cc
index 70d12ad92a2..7792eef4466 100644
--- a/Build/source/utils/lcdf-typetools/t1reencode/util.cc
+++ b/Build/source/utils/lcdf-typetools/t1reencode/util.cc
@@ -1,6 +1,6 @@
/* util.{cc,hh} -- various bits
*
- * Copyright (c) 2003-2005 Eddie Kohler
+ * Copyright (c) 2003-2006 Eddie Kohler
*
* This program 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
diff --git a/Build/source/utils/lcdf-typetools/t1testpage/Makefile.in b/Build/source/utils/lcdf-typetools/t1testpage/Makefile.in
index 0622da867c7..02df61e63eb 100644
--- a/Build/source/utils/lcdf-typetools/t1testpage/Makefile.in
+++ b/Build/source/utils/lcdf-typetools/t1testpage/Makefile.in
@@ -1,8 +1,8 @@
-# Makefile.in generated by automake 1.9.2 from Makefile.am.
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004 Free Software Foundation, Inc.
+# 2003, 2004, 2005 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@@ -14,8 +14,6 @@
@SET_MAKE@
-SOURCES = $(t1testpage_SOURCES)
-
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
diff --git a/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.1 b/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.1
index 87816fe364f..0dc71274bff 100644
--- a/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.1
+++ b/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.1
@@ -1,4 +1,4 @@
-.ds V 2.34
+.ds V 2.46
.de M
.BR "\\$1" "(\\$2)\\$3"
..
@@ -59,4 +59,4 @@ Print the version number and some short non-warranty information and exit.
.PD
'
.SH AUTHOR
-Eddie Kohler (kohler@icir.org)
+Eddie Kohler (kohler@cs.ucla.edu)
diff --git a/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.cc b/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.cc
index ec8facc6379..82901597316 100644
--- a/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.cc
+++ b/Build/source/utils/lcdf-typetools/t1testpage/t1testpage.cc
@@ -1,6 +1,6 @@
/* t1testpage.cc -- driver for generating Type 1 fonts' test pages
*
- * Copyright (c) 1999-2004 Eddie Kohler
+ * Copyright (c) 1999-2006 Eddie Kohler
*
* This program 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
@@ -559,7 +559,7 @@ main(int argc, char *argv[])
case VERSION_OPT:
printf("t1testpage (LCDF typetools) %s\n", VERSION);
- printf("Copyright (C) 1999-2004 Eddie Kohler\n\
+ printf("Copyright (C) 1999-2006 Eddie Kohler\n\
This is free software; see the source for copying conditions.\n\
There is NO warranty, not even for merchantability or fitness for a\n\
particular purpose.\n");
diff --git a/Build/source/utils/lcdf-typetools/texglyphlist.txt b/Build/source/utils/lcdf-typetools/texglyphlist.txt
new file mode 100644
index 00000000000..e22e80752e2
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/texglyphlist.txt
@@ -0,0 +1,132 @@
+# lcdf-typetools texglyphlist.txt, Version 2.33
+# Contents: Extensions to the Adobe Glyph List for TeX fonts and
+# encodings. We also extend the second field so that it can contain
+# multiple Unicode scalar values, separated by commas, analogous to
+# otftotfm's "% UNICODING" comments.
+###############################################################################
+Delta;2206,0394
+Ifractur;2111
+# FFsmall, FFIsmall, FFLsmall, FIsmall, FLsmall: invalid Unicode
+FFsmall;D804
+FFIsmall;D807
+FFLsmall;D808
+FIsmall;D805
+FLsmall;D806
+# Germandbls: invalid Unicode, used for secondary replacement from EC.enc
+Germandbls;D800
+# Germandblssmall: invalid Unicode
+Germandblssmall;D803
+Ng;014A
+Omega;2126,03A9
+Rfractur;211C
+# SS: invalid Unicode, used for secondary replacement from EC.enc
+SS;D800
+# SSsmall: invalid Unicode
+SSsmall;D803
+# altselector: invalid Unicode
+altselector;D802
+angbracketleft;27E8,2329
+angbracketright;27E9,232A
+arrowbothv;2195
+arrowdblbothv;21D5
+arrowleftbothalf;21BD
+arrowlefttophalf;21BC
+arrownortheast;2197
+arrownorthwest;2196
+arrowrightbothalf;21C1
+arrowrighttophalf;21C0
+arrowsoutheast;2198
+arrowsouthwest;2199
+# ascendercompwordmark: taller cwm, invalid Unicode
+ascendercompwordmark;D80A
+asteriskcentered;2217
+bardbl;2225
+# capitalcompwordmark: taller cwm, invalid Unicode
+capitalcompwordmark;D809
+ceilingleft;2308
+ceilingright;2309
+circlecopyrt;20DD,25CB
+circledivide;2298
+circledot;2299
+circleminus;2296
+coproduct;2A3F
+# cwm: Unicode for ZWNJ, used for secondary replacement from EC.enc
+cwm;200C
+dblbracketleft;27E6
+dblbracketright;27E7
+diamond;2662,2666
+diamondmath;22C4
+# U+0237 is the proposed allocation for dotless j as of Unicode 4.0
+# U+1D6A5 is the mathematical italic version approved in Unicode 5.0
+dotlessj;0237,F6BE,1D6A5
+emptyset;2205,F638
+# emptyslot: invalid Unicode; the user explicitly wants this slot empty
+emptyslot;D801
+epsilon1;03F5
+equivasymptotic;224D
+flat;266D
+floorleft;230A
+floorright;230B
+follows;227B
+followsequal;227D
+greatermuch;226B
+heart;2661,2665
+interrobang;203D
+# interrobangdown: inverted interrobang, invalid Unicode
+interrobangdown;D80B
+intersectionsq;2293
+latticetop;22A4
+lessmuch;226A
+lscript;2113
+natural;266E
+negationslash;0338
+ng;014B
+owner;220B
+pertenthousand;2031
+# TeX encodings such as 'texmital.enc' disagree with Unicode and the Adobe
+# glyph list; in TeX, the "straight" form of phi takes the name "phi",
+# whereas the more-common "loopy" form of phi, \varphi, takes the name "phi1".
+phi;03D5,03C6
+phi1;03C6
+pi1;03D6
+precedesequal;227C
+prime;2032,02B9
+rho1;03F1
+# ringfitted: a ring character centered on the x-width of A, invalid Unicode
+ringfitted;D80D
+sharp;266F
+similarequal;2243
+slurabove;2322
+slurbelow;2323
+star;22C6
+subsetsqequal;2291
+supersetsqequal;2292
+triangle;25B3
+triangleinv;25BD
+triangleleft;25B9
+triangleright;25C3
+turnstileleft;22A2
+turnstileright;22A3
+# twelveudash: 2/3-em dash; invalid Unicode
+twelveudash;D80C
+unionmulti;228E
+unionsq;2294
+vector;20D7
+# visualspace: Unicode for OPEN BOX, used for secondary replacement from EC.enc
+visualspace;2423
+wreathproduct;2240
+# -- Marco Kuhlmann reported annoying glyph neologisms in fontinst encodings
+# Dbar = Dcroat
+Dbar;0110
+# compwordmark = cwm
+compwordmark;200C
+# dbar = dcroat
+dbar;0111
+# rangedash = endash
+rangedash;2013
+# hyphenchar = hyphen
+hyphenchar;002D
+# punctdash = emdash
+punctdash;2014
+# visiblespace = visualspace
+visiblespace;2423
diff --git a/Build/source/utils/lcdf-typetools/ttftotype42/Makefile.am b/Build/source/utils/lcdf-typetools/ttftotype42/Makefile.am
new file mode 100644
index 00000000000..24206d0d0a3
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/ttftotype42/Makefile.am
@@ -0,0 +1,14 @@
+## Process this file with automake to produce Makefile.in
+AUTOMAKE_OPTIONS = foreign
+
+bin_PROGRAMS = ttftotype42
+man_MANS = ttftotype42.1
+
+ttftotype42_SOURCES = ttftotype42.cc
+
+ttftotype42_LDADD = ../libefont/libefont.a ../liblcdf/liblcdf.a
+
+INCLUDES = -I$(top_srcdir)/include
+CLEANFILES = @TEMPLATE_OBJS@
+
+EXTRA_DIST = ttftotype42.1
diff --git a/Build/source/utils/lcdf-typetools/ttftotype42/Makefile.in b/Build/source/utils/lcdf-typetools/ttftotype42/Makefile.in
new file mode 100644
index 00000000000..a7bac6919e6
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/ttftotype42/Makefile.in
@@ -0,0 +1,465 @@
+# Makefile.in generated by automake 1.9.6 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005 Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+bin_PROGRAMS = ttftotype42$(EXEEXT)
+subdir = ttftotype42
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/configure.in
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_ttftotype42_OBJECTS = ttftotype42.$(OBJEXT)
+ttftotype42_OBJECTS = $(am_ttftotype42_OBJECTS)
+ttftotype42_DEPENDENCIES = ../libefont/libefont.a ../liblcdf/liblcdf.a
+DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+SOURCES = $(ttftotype42_SOURCES)
+DIST_SOURCES = $(ttftotype42_SOURCES)
+man1dir = $(mandir)/man1
+NROFF = nroff
+MANS = $(man_MANS)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FIXLIBC_O = @FIXLIBC_O@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+KPSEINTERFACE_O = @KPSEINTERFACE_O@
+LDFLAGS = @LDFLAGS@
+LIBKPATHSEA = @LIBKPATHSEA@
+LIBKPATHSEA_DEP = @LIBKPATHSEA_DEP@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAINT = @MAINT@
+MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
+MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
+MAKEINFO = @MAKEINFO@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+RANLIB = @RANLIB@
+SELECTED_SUBDIRS = @SELECTED_SUBDIRS@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+TEMPLATE_OBJS = @TEMPLATE_OBJS@
+VERSION = @VERSION@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
+am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build_alias = @build_alias@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host_alias = @host_alias@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+AUTOMAKE_OPTIONS = foreign
+man_MANS = ttftotype42.1
+ttftotype42_SOURCES = ttftotype42.cc
+ttftotype42_LDADD = ../libefont/libefont.a ../liblcdf/liblcdf.a
+INCLUDES = -I$(top_srcdir)/include
+CLEANFILES = @TEMPLATE_OBJS@
+EXTRA_DIST = ttftotype42.1
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .cc .o .obj
+$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+ && exit 0; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign ttftotype42/Makefile'; \
+ cd $(top_srcdir) && \
+ $(AUTOMAKE) --foreign ttftotype42/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+ @$(NORMAL_INSTALL)
+ test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)"
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+ if test -f $$p \
+ ; then \
+ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+ $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+ else :; fi; \
+ done
+
+uninstall-binPROGRAMS:
+ @$(NORMAL_UNINSTALL)
+ @list='$(bin_PROGRAMS)'; for p in $$list; do \
+ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+ rm -f "$(DESTDIR)$(bindir)/$$f"; \
+ done
+
+clean-binPROGRAMS:
+ -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+ttftotype42$(EXEEXT): $(ttftotype42_OBJECTS) $(ttftotype42_DEPENDENCIES)
+ @rm -f ttftotype42$(EXEEXT)
+ $(CXXLINK) $(ttftotype42_LDFLAGS) $(ttftotype42_OBJECTS) $(ttftotype42_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttftotype42.Po@am__quote@
+
+.cc.o:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $<
+
+.cc.obj:
+@am__fastdepCXX_TRUE@ if $(CXXCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \
+@am__fastdepCXX_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+uninstall-info-am:
+install-man1: $(man1_MANS) $(man_MANS)
+ @$(NORMAL_INSTALL)
+ test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)"
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
+ else file=$$i; fi; \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+uninstall-man1:
+ @$(NORMAL_UNINSTALL)
+ @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
+ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
+ for i in $$l2; do \
+ case "$$i" in \
+ *.1*) list="$$list $$i" ;; \
+ esac; \
+ done; \
+ for i in $$list; do \
+ ext=`echo $$i | sed -e 's/^.*\\.//'`; \
+ case "$$ext" in \
+ 1*) ;; \
+ *) ext='1' ;; \
+ esac; \
+ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
+ inst=`echo $$inst | sed -e 's/^.*\///'`; \
+ inst=`echo $$inst | sed '$(transform)'`.$$ext; \
+ echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
+ rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
+ done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ mkid -fID $$unique
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$tags $$unique; \
+ fi
+ctags: CTAGS
+CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
+ $(TAGS_FILES) $(LISP)
+ tags=; \
+ here=`pwd`; \
+ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | \
+ $(AWK) ' { files[$$0] = 1; } \
+ END { for (i in files) print i; }'`; \
+ test -z "$(CTAGS_ARGS)$$tags$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$tags $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && cd $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+ list='$(DISTFILES)'; for file in $$list; do \
+ case $$file in \
+ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+ esac; \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+ dir="/$$dir"; \
+ $(mkdir_p) "$(distdir)$$dir"; \
+ else \
+ dir=''; \
+ fi; \
+ if test -d $$d/$$file; then \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+ fi; \
+ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+ else \
+ test -f $(distdir)/$$file \
+ || cp -p $$d/$$file $(distdir)/$$file \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS) $(MANS)
+installdirs:
+ for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)"; do \
+ test -z "$$dir" || $(mkdir_p) "$$dir"; \
+ done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ `test -z '$(STRIP)' || \
+ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am: install-man
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man: install-man1
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-info-am uninstall-man
+
+uninstall-man: uninstall-man1
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+ clean-generic ctags distclean distclean-compile \
+ distclean-generic distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-binPROGRAMS \
+ install-data install-data-am install-exec install-exec-am \
+ install-info install-info-am install-man install-man1 \
+ install-strip installcheck installcheck-am installdirs \
+ maintainer-clean maintainer-clean-generic mostlyclean \
+ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \
+ tags uninstall uninstall-am uninstall-binPROGRAMS \
+ uninstall-info-am uninstall-man uninstall-man1
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.1 b/Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.1
new file mode 100644
index 00000000000..2cdadf029bb
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.1
@@ -0,0 +1,78 @@
+.ds V 2.46
+.de M
+.BR "\\$1" "(\\$2)\\$3"
+..
+.de Sp
+.if n .sp
+.if t .sp 0.4
+..
+.TH TTFTOTYPE42 1 "LCDF Typetools" "Version \*V"
+.SH NAME
+ttftotype42 \- create PostScript Type 42 wrapper of TrueType font
+.SH SYNOPSIS
+.B ttftotype42
+\%[\fIinput\fR [\fIoutput\fR]]
+.SH DESCRIPTION
+.BR Ttftotype42
+converts TrueType or TrueType-flavored OpenType font programs into
+PostScript Type 42 format, which is a wrapper for the TrueType outlines.
+This conversion preserves all outlines and hint information from the
+original TrueType font. The Type 42 wrapper uses glyph names identical to
+those expected by
+.M pdflatex 1
+or
+.M otftotfm 1 ,
+so encoding files suitable for TrueType fonts and
+.B pdflatex
+will also work for the Type 42 fonts and
+.M dvips 1 .
+If the file
+.I output
+is not specified output goes to the standard output.
+If the file
+.I input
+is not specified input comes from the standard input.
+'
+.SH OPTIONS
+.PD 0
+.TP 5
+.BI \-o " file\fR, " \-\-output " file"
+Write output font to
+.IR file
+instead of the standard output.
+'
+.Sp
+.TP 5
+.BR \-q ", " \-\-quiet
+Do not generate any error messages.
+'
+.Sp
+.TP 5
+.BR \-h ", " \-\-help
+Print usage information and exit.
+'
+.Sp
+.TP 5
+.BR \-v ", " \-\-version
+Print the version number and some short non-warranty information and exit.
+.PD
+'
+.SH "SEE ALSO"
+.LP
+.M cfftot1 1 ,
+.M otftotfm 1 ,
+.M pdftex 1 ,
+.M dvips 1
+.LP
+Adobe Technical Note #5012,
+.IR "The Type 42 Font Format Specification"
+.LP
+.IR "OpenType Specification" ,
+Version 1.4
+'
+.SH AUTHOR
+Eddie Kohler (kohler@cs.ucla.edu)
+.PP
+The latest version is available from:
+.br
+http://www.lcdf.org/type/
diff --git a/Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.cc b/Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.cc
new file mode 100644
index 00000000000..270038a9c05
--- /dev/null
+++ b/Build/source/utils/lcdf-typetools/ttftotype42/ttftotype42.cc
@@ -0,0 +1,380 @@
+/* ttftotype42.cc -- driver for translating TrueType fonts to Type 42 fonts
+ *
+ * Copyright (c) 2006 Eddie Kohler
+ *
+ * This program 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 of the License, or (at your option)
+ * any later version. This program 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <efont/t1rw.hh>
+#include <efont/t1font.hh>
+#include <efont/t1item.hh>
+#include <lcdf/clp.h>
+#include <lcdf/error.hh>
+#include <efont/cff.hh>
+#include <efont/otf.hh>
+#include <efont/otfname.hh>
+#include <efont/otfpost.hh>
+#include <efont/otfcmap.hh>
+#include <efont/ttfcs.hh>
+#include <lcdf/md5.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <ctype.h>
+#include <errno.h>
+#include <math.h>
+#ifdef HAVE_CTIME
+# include <time.h>
+#endif
+#if defined(_MSDOS) || defined(_WIN32)
+# include <fcntl.h>
+# include <io.h>
+#endif
+
+using namespace Efont;
+
+#define VERSION_OPT 301
+#define HELP_OPT 302
+#define QUIET_OPT 303
+#define OUTPUT_OPT 306
+
+Clp_Option options[] = {
+ { "help", 'h', HELP_OPT, 0, 0 },
+ { "output", 'o', OUTPUT_OPT, Clp_ArgString, 0 },
+ { "quiet", 'q', QUIET_OPT, 0, Clp_Negate },
+ { "version", 'v', VERSION_OPT, 0, 0 },
+};
+
+
+static const char *program_name;
+
+
+void
+usage_error(ErrorHandler *errh, const char *error_message, ...)
+{
+ va_list val;
+ va_start(val, error_message);
+ if (!error_message)
+ errh->message("Usage: %s [OPTIONS] [FONTFILE [OUTPUTFILE]]", program_name);
+ else
+ errh->verror(ErrorHandler::ERR_ERROR, String(), error_message, val);
+ errh->message("Type %s --help for more information.", program_name);
+ exit(1);
+}
+
+void
+usage()
+{
+ printf("\
+'Ttftotype42' translates a TrueType or TrueType-flavored OpenType font into\n\
+PostScript Type 42 format, which is suitable for inclusion in PostScript\n\
+files. The result, is usually written to the standard output.\n\
+\n\
+Usage: %s [OPTIONS] [FONTFILE [OUTPUTFILE]]\n\
+\n\
+Options:\n\
+ -o, --output=FILE Write output to FILE.\n\
+ -q, --quiet Do not generate any error messages.\n\
+ -h, --help Print this message and exit.\n\
+ -v, --version Print version number and exit.\n\
+\n\
+Report bugs to <kohler@cs.ucla.edu>.\n", program_name);
+}
+
+
+// MAIN
+
+// This is the list of tables Adobe recommends be included from the source TTF,
+// plus the 'cmap' table, which helps to make PDF results searchable.
+static const char * const t42_tables[] = {
+ "cmap", "cvt ", "fpgm", "glyf", "head", "hhea", "hmtx",
+ "loca", "maxp", "prep", "vhea", "vmtx", 0
+};
+
+struct NameId {
+ const char *name;
+ int nameid;
+};
+
+static const NameId fontinfo_names[] = {
+ { "version", OpenType::Name::N_VERSION },
+ { "Notice", OpenType::Name::N_TRADEMARK },
+ { "Copyright", OpenType::Name::N_COPYRIGHT },
+ { "FullName", OpenType::Name::N_FULLNAME },
+ { "FamilyName", OpenType::Name::N_FAMILY },
+ { "Weight", OpenType::Name::N_SUBFAMILY },
+ { 0, 0 }
+};
+
+static void
+fprint_sfnts(FILE *f, const String &data, bool glyf, const OpenType::Font &font)
+{
+ if (glyf && data.length() >= 65535) {
+ OpenType::Data head = font.table("head");
+ OpenType::Data loca = font.table("loca");
+ bool loca_long = (head.length() >= 52 && head.u16(50) != 0);
+ int loca_size = (loca_long ? 4 : 2);
+ uint32_t first_offset = 0;
+ for (int i = 1; i * loca_size < loca.length(); i++) {
+ uint32_t next_offset = (loca_long ? loca.u32(4*i) : loca.u16(2*i) * 2);
+ if (next_offset - first_offset >= 65535) {
+ uint32_t prev_offset = (loca_long ? loca.u32(4*i - 4) : loca.u16(2*i - 2) * 2);
+ fprint_sfnts(f, data.substring(first_offset, prev_offset - first_offset), false, font);
+ first_offset = prev_offset;
+ }
+ }
+ fprint_sfnts(f, data.substring(first_offset), false, font);
+ return;
+ }
+
+ fputc('<', f);
+ const uint8_t *s = data.udata();
+ for (int i = 0; i < data.length(); i++) {
+ if (i && (i % 38) == 0)
+ fputc('\n', f);
+ fputc("0123456789ABCDEF"[(s[i] >> 4) & 0xF], f);
+ fputc("0123456789ABCDEF"[s[i] & 0xF], f);
+ }
+ if ((data.length() % 38) == 0)
+ fputc('\n', f);
+ fputs("00>\n", f);
+}
+
+static void
+do_file(const char *infn, const char *outfn, ErrorHandler *errh)
+{
+ FILE *f;
+ if (!infn || strcmp(infn, "-") == 0) {
+ f = stdin;
+ infn = "<stdin>";
+#if defined(_MSDOS) || defined(_WIN32)
+ _setmode(_fileno(f), _O_BINARY);
+#endif
+ } else if (!(f = fopen(infn, "rb")))
+ errh->fatal("%s: %s", infn, strerror(errno));
+
+ int c = getc(f);
+ ungetc(c, f);
+
+ if (c == EOF)
+ errh->fatal("%s: empty file", infn);
+
+ StringAccum sa(150000);
+ while (!feof(f)) {
+ int forward = fread(sa.reserve(32768), 1, 32768, f);
+ sa.forward(forward);
+ }
+ if (f != stdin)
+ fclose(f);
+
+ LandmarkErrorHandler cerrh(errh, infn);
+ OpenType::Font otf(sa.take_string(), &cerrh);
+ if (!otf.ok() || !otf.check_checksums(&cerrh))
+ return;
+ if (otf.table("CFF"))
+ cerrh.fatal("CFF-flavored OpenType font not suitable for Type 42");
+
+ OpenType::Name name(otf.table("name"), &cerrh);
+ OpenType::Data head_data = otf.table("head");
+ if (!otf.table("glyf") || head_data.length() <= 52 || !name.ok())
+ cerrh.fatal("font appears to lack required tables");
+
+ // create reduced font
+ Vector<OpenType::Tag> tags;
+ Vector<String> tables;
+ for (const char * const *table = t42_tables; *table; table++)
+ if (String s = otf.table(*table)) {
+ tags.push_back(*table);
+ tables.push_back(s);
+ }
+ OpenType::Font reduced_font = OpenType::Font::make(true, tags, tables);
+
+ // output file
+ if (!outfn || strcmp(outfn, "-") == 0) {
+ f = stdout;
+ outfn = "<stdout>";
+ } else if (!(f = fopen(outfn, "wb")))
+ errh->fatal("%s: %s", outfn, strerror(errno));
+
+#if defined(_MSDOS) || defined(_WIN32)
+ if (binary)
+ _setmode(_fileno(f), _O_BINARY);
+#endif
+
+ // fprintf(f, "%%!\n");
+
+ // get glyph names
+ TrueTypeBoundsCharstringProgram ttbprog(&otf);
+ Vector<PermString> gn;
+ ttbprog.glyph_names(gn);
+ OpenType::Post post(otf.table("post"));
+ OpenType::Cmap cmap(otf.table("cmap"));
+ double emunits = head_data.u16(18);
+
+ // font opener
+ fprintf(f, "%%!PS-TrueTypeFont-65536-%u-1\n", head_data.u32(4));
+ if (post.ok())
+ fprintf(f, "%%%%VMusage: %u %u\n", post.mem_type42(false), post.mem_type42(true));
+ fprintf(f, "11 dict begin\n");
+ fprintf(f, "/FontName /%s def\n", name.english_name(OpenType::Name::N_POSTSCRIPT).c_str());
+ fprintf(f, "/FontType 42 def\n");
+ fprintf(f, "/FontMatrix [1 0 0 1 0 0] def\n");
+ fprintf(f, "/FontBBox [%g %g %g %g] readonly def\n",
+ /* head_data.s16(36), head_data.s16(38),
+ head_data.s16(40), head_data.s16(42)); */
+ head_data.s16(36) / emunits, head_data.s16(38) / emunits,
+ head_data.s16(40) / emunits, head_data.s16(42) / emunits);
+ fprintf(f, "/PaintType 0 def\n");
+
+ // XUID (MD5 sum of font data)
+ {
+ MD5_CONTEXT md5;
+ md5_init(&md5);
+ md5_update(&md5, (const unsigned char *) reduced_font.data(), reduced_font.length());
+ union {
+ unsigned char c[MD5_DIGEST_SIZE];
+ uint32_t u[MD5_DIGEST_SIZE / 4];
+ } result;
+ md5_final(&result.c[0], &md5);
+ fprintf(f, "/XUID [42");
+ for (int i = 0; i < MD5_DIGEST_SIZE / 4; i++)
+ fprintf(f, " 16#%X", result.u[i]);
+ fprintf(f, "] def\n");
+ }
+
+ // FontInfo dictionary
+ fprintf(f, "/FontInfo 10 dict dup begin\n");
+ for (const NameId *n = fontinfo_names; n->name; n++)
+ if (String s = name.english_name(n->nameid)) {
+ fprintf(f, "/%s (", n->name);
+ for (const char *x = s.begin(); x < s.end(); x++)
+ if (*x == '(' || *x == '\\' || *x == ')')
+ fprintf(f, "\\%c", *x);
+ else if (*x == '\n' || (*x >= ' ' && *x <= '~'))
+ fputc(*x, f);
+ else
+ fprintf(f, "\\%03o", (unsigned char) *x);
+ fprintf(f, ") readonly def\n");
+ }
+ if (post.ok()) {
+ fprintf(f, "/isFixedPitch %s def\n", (post.is_fixed_pitch() ? "true" : "false"));
+ fprintf(f, "/ItalicAngle %g def\n", post.italic_angle());
+ fprintf(f, "/UnderlinePosition %g def\n", (post.underline_position() - (post.underline_thickness() / 2)) / emunits);
+ fprintf(f, "/UnderlineThickness %g def\n", post.underline_thickness() / emunits);
+ }
+ fprintf(f, "end readonly def\n");
+
+ // encoding
+ fprintf(f, "/Encoding 256 array\n0 1 255{1 index exch/.notdef put}for\n");
+ for (int i = 0; i < 256; i++)
+ if (OpenType::Glyph g = cmap.map_uni(i))
+ fprintf(f, "dup %d /%s put\n", i, gn[g].c_str());
+ fprintf(f, "readonly def\n");
+
+ // print 'sfnts' array
+ OpenType::Data sfnts = reduced_font.data_string();
+ fprintf(f, "/sfnts[\n");
+ fprint_sfnts(f, sfnts.substring(0, OpenType::Font::HEADER_SIZE + OpenType::Font::TABLE_DIR_ENTRY_SIZE * reduced_font.ntables()), false, reduced_font);
+ for (int i = 0; i < reduced_font.ntables(); i++) {
+ int off = OpenType::Font::HEADER_SIZE + OpenType::Font::TABLE_DIR_ENTRY_SIZE * i;
+ uint32_t offset = sfnts.u32(off + 8);
+ uint32_t length = (sfnts.u32(off + 12) + 3) & ~3;
+ fprint_sfnts(f, sfnts.substring(offset, length), sfnts.u32(off) == 0x676C7966 /*glyf*/, reduced_font);
+ }
+ fprintf(f, "] def\n");
+
+ // print CharStrings data
+ fprintf(f, "/CharStrings %d dict dup begin\n", ttbprog.nglyphs());
+ for (int i = 0; i < gn.size(); i++)
+ fprintf(f, "/%s %d def\n", gn[i].c_str(), i);
+ fprintf(f, "end readonly def\n");
+
+ // complete font
+ fprintf(f, "FontName currentdict end definefont pop\n");
+
+ // fprintf(f, "/%s 100 selectfont 30 30 moveto (Hello! 9) show showpage\n", name.english_name(OpenType::Name::N_POSTSCRIPT).c_str());
+
+ if (f != stdout)
+ fclose(f);
+}
+
+int
+main(int argc, char *argv[])
+{
+ Clp_Parser *clp =
+ Clp_NewParser(argc, (const char * const *)argv, sizeof(options) / sizeof(options[0]), options);
+ program_name = Clp_ProgramName(clp);
+
+ ErrorHandler *errh = ErrorHandler::static_initialize(new FileErrorHandler(stderr, String(program_name) + ": "));
+ const char *input_file = 0;
+ const char *output_file = 0;
+
+ while (1) {
+ int opt = Clp_Next(clp);
+ switch (opt) {
+
+ case QUIET_OPT:
+ if (clp->negated)
+ errh = ErrorHandler::default_handler();
+ else
+ errh = new SilentErrorHandler;
+ break;
+
+ case VERSION_OPT:
+ printf("ttftotype42 (LCDF typetools) %s\n", VERSION);
+ printf("Copyright (C) 2006 Eddie Kohler\n\
+This is free software; see the source for copying conditions.\n\
+There is NO warranty, not even for merchantability or fitness for a\n\
+particular purpose.\n");
+ exit(0);
+ break;
+
+ case HELP_OPT:
+ usage();
+ exit(0);
+ break;
+
+ case OUTPUT_OPT:
+ output_file:
+ if (output_file)
+ usage_error(errh, "output file specified twice");
+ output_file = clp->arg;
+ break;
+
+ case Clp_NotOption:
+ if (input_file && output_file)
+ usage_error(errh, "too many arguments");
+ else if (input_file)
+ goto output_file;
+ else
+ input_file = clp->arg;
+ break;
+
+ case Clp_Done:
+ goto done;
+
+ case Clp_BadOption:
+ usage_error(errh, 0);
+ break;
+
+ default:
+ break;
+
+ }
+ }
+
+ done:
+ do_file(input_file, output_file, errh);
+
+ return (errh->nerrors() == 0 ? 0 : 1);
+}